[swift-users] Swift 4 "Cannot use mutating member on immutable value: 'self' is immutable"
somu subscribe
somu.subscribe at gmail.com
Wed Sep 13 21:55:58 CDT 2017
Not sure why it is happening, but given below are my observations:
Simplified version:
var array = [1, 2, 3, 4, 5]
_ = array.popFirst() //error: cannot use mutating member on immutable value: 'array' is immutable
_ = array.popLast() //works ok
popFirst is not available in the Array documentation and “Jump to Definition” doesn’t seem to work.
Thanks and regards,
Muthu
> On 14 Sep 2017, at 9:59 AM, Jon Shier via swift-users <swift-users at swift.org> 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.
>
>
>
> Jon
>
>
>> On Sep 13, 2017, at 9:47 PM, Zhao Xin via swift-users <swift-users at swift.org <mailto:swift-users at 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 <rmann at latencyzero.com <mailto:rmann at 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 <owenzx at gmail.com <mailto:owenzx at 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 at swift.org <mailto:swift-users at 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
>> > rmann at latencyzero.com <mailto:rmann at latencyzero.com>
>> >
>> >
>> > _______________________________________________
>> > swift-users mailing list
>> > swift-users at swift.org <mailto:swift-users at swift.org>
>> > https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>> >
>>
>>
>> --
>> Rick Mann
>> rmann at latencyzero.com <mailto:rmann at latencyzero.com>
>>
>>
>>
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org <mailto:swift-users at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170914/c2c08178/attachment.html>
More information about the swift-users
mailing list