[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