I meant to add: I implemented it based on the declaration of popLast(). > On Sep 15, 2017, at 13:05 , Roderick Mann via swift-users > <swift-users@swift.org> wrote: > > >> 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
-- Rick Mann rm...@latencyzero.com _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users