Did this change in Swift 4? I like being able to refer to the class in a class func as "self". If I ever change the name of the class, or refactor the code, or something, I don't have to change it in a bunch of places.
> On Sep 13, 2017, at 18:11 , Zhao Xin <owe...@gmail.com> wrote: > > Change `self` to `ModelFetcher`. You are calling a class static property, not > a class instance property. > > Zhao Xin > > On Thu, Sep 14, 2017 at 8:37 AM, Rick Mann via swift-users > <swift-users@swift.org> wrote: > Moving to Swift 4, I'm running into an issue for which I can't seem to find > an answer in google: > > "Cannot use mutating member on immutable value: 'self' is immutable" > > The code looks like: > > class > ModelFetcher : NSObject, URLSessionDelegate > { > ... > static let managerDispatchQueue = > DispatchQueue(label: "Model Download Manager Queue") > static var pendingFetchers = > [ModelFetcher]() > static var currentFetcher: ModelFetcher? > > class > func > startNextFetcher() > { > self.managerDispatchQueue.async > { > guard > self.currentFetcher == nil, > let mf = self.pendingFetchers.popFirst() > ~~~~ ^ error: cannot use > mutating member on immutable value: 'self' is immutable > else > { > return > } > > self.currentFetcher = mf > mf.start() > } > } > ... > } > > This code compiled fine in Xcode 8, or in Xcode 9/Swift 3.2 as a monolithic > app (the error shows up when this code is factored into a framework). Other > mutating references to self seem to compile okay (e.g. "self.currentFetcher = > nil" or "self.pendingFetchers.remove(at: idx)"). Not sure what's special > about this one. > > > -- > Rick Mann > rm...@latencyzero.com > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users > -- Rick Mann rm...@latencyzero.com _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users