[swift-users] Swift 4 "Cannot use mutating member on immutable value: 'self' is immutable"
Rick Mann
rmann at latencyzero.com
Wed Sep 13 19:36:14 CDT 2017
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
rmann at latencyzero.com
More information about the swift-users
mailing list