> On Sep 13, 2017, at 18:59 , Jon Shier <j...@jonshier.com> wrote: > > I think there’s something strange with popFirst. It doesn’t show up in > the autocomplete in Xcode, but it compiles, and popLast doesn’t throw the > same error. removeFirst doesn’t either, though it’s unsafe. Weird.
extension Array { public mutating func popFirst() -> Array.Element? { if self.count > 0 { return self.removeFirst() } return nil } } > > > > Jon > > >> On Sep 13, 2017, at 9:47 PM, Zhao Xin via swift-users >> <swift-users@swift.org> wrote: >> >> I begin to think it is related to how you `popFirst()` implemented. Check it >> or post it here. >> >> Zhao Xin >> >> On Thu, Sep 14, 2017 at 9:36 AM, Roderick Mann <rm...@latencyzero.com> wrote: >> Yeah, that's not it. I made the change you suggested, I get the same error. >> >> > 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 > -- Rick Mann rm...@latencyzero.com _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users