This seems oddly similar to https://bugs.swift.org/browse/SR-5659, but [Thing] should meet the appropriate criteria for popFirst to work properly. Yet the error we’re seeing here is the same that was originally seen when trying to use popFirst on a String. Definitely feels like some sort of Swift bug here.
Jon > On Sep 14, 2017, at 10:48 AM, Jon Shier via swift-users > <swift-users@swift.org> wrote: > > It also doesn’t explain why removeFirst would work but popFirst > doesn’t. The mutation to the underlying array should be the same, the only > different is that one returns the element optionally. It also doesn’t explain > why popFirst doesn’t show up I the autocomplete but compiles anyway. > > > > Jon > >> On Sep 14, 2017, at 8:16 AM, Vladimir.S via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> On 14.09.2017 11:14, Quinn "The Eskimo!" via swift-users wrote: >>> On 14 Sep 2017, at 03:56, somu subscribe via swift-users >>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>>> popFirst is not available in the Array … >>> Right. This makes sense when you consider the standard setup for an array, >>> namely, a variable length buffer of items. Removing the first element is >>> expensive, whereas removing the last element (`popLast()`) is cheap. >>> If you run your simplified example in Xcode 8 you get an error that hints >>> at what’s going on. >>> var array = [1, 2, 3, 4, 5] >>> _ = array.popFirst() >>> ~~~~~~^~~~~~~~ >>> error: 'ArraySlice<Int>' is not convertible to '[Int]' >> >> Sorry, could you clarify, I can't understand. >> What should be the error message here and why at all we should have an error >> here? >> >> Are we forced to use this code to pop first element in array? : >> var array = [1, 2, 3, 4, 5] >> let x = array[0...].popFirst() >> print(x!) // 1 >> print(array) // [2,3,4,5] >> >> And why we shouldn't be allowed to have popFirst() for array? Yes, it is >> expensive, but is it a right reason to disallow it totally? In many >> situations we have a small arrays and don't care so much how fast the first >> element will be pop'ed. >> I hope I'm just missing something. >> >> Vladimir. >> >>> Notably, I put Rick’s code into Xcode 8 (Xcode 8.3.3 on macOS 10.12.6 with >>> a new command line tool project) and I get the same error there. >>> let mf = self.pendingFetchers.popFirst() >>> ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ >>> error: 'ArraySlice<ModelFetcher>' is not convertible to '[ModelFetcher]’ >>> * * * >>> @Rick, there’s two things in play here: >>> * The diagnostic is clearly bogus and you should definitely file a bug >>> about that. >>> <https://bugs.swift.org/ <https://bugs.swift.org/>> >>> Please post your bug number, just for the record. >>> * You wrote: >>>> This code compiled fine in Xcode 8 … >>> My tests indicate that it doesn’t. I suspect that you changed something >>> else during the Swift 4 migration and that’s why you’re seeing it fail. >>> Can you take another look at the original Xcode 8 code to see what’s else >>> got changed? >>> Share and Enjoy >>> -- >>> Quinn "The Eskimo!" <http://www.apple.com/developer/ >>> <http://www.apple.com/developer/>> >>> Apple Developer Relations, Developer Technical Support, Core OS/Hardware >>> _______________________________________________ >>> swift-users mailing list >>> swift-users@swift.org <mailto:swift-users@swift.org> >>> https://lists.swift.org/mailman/listinfo/swift-users >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >> <https://lists.swift.org/mailman/listinfo/swift-users> > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users