[swift-evolution] Why doesn't removeLast() on Collection return an optional?
Max Moiseev
moiseev at apple.com
Mon Oct 17 15:52:08 CDT 2016
You can use popLast, that does exactly that: https://github.com/apple/swift/blob/master/stdlib/public/core/BidirectionalCollection.swift#L213 <https://github.com/apple/swift/blob/master/stdlib/public/core/BidirectionalCollection.swift#L213>
Max
> On Oct 17, 2016, at 1:14 PM, Louis D'hauwe via swift-evolution <swift-evolution at swift.org> wrote:
>
> Regarding the removeLast() function on Collection:
>
> The current implementation <https://github.com/apple/swift/blob/c3b7709a7c4789f1ad7249d357f69509fb8be731/stdlib/public/core/BidirectionalCollection.swift#L228> is:
> @discardableResult
> public mutating func removeLast() -> Iterator.Element {
> let element = last!
> self = self[startIndex..<index(before: endIndex)]
> return element
> }
>
> This makes it so that if you call removeLast() on an empty collection you get a fatal error.
> ("fatal error: can't remove last element from an empty collection")
>
> The documentation for removeLast() <https://github.com/apple/swift/blob/c3b7709a7c4789f1ad7249d357f69509fb8be731/stdlib/public/core/BidirectionalCollection.swift#L220> even has this noted:
> "The collection must not be empty.".
>
> Surely you could just remove the explicit unwrapping of 'last' and add a guard statement?
>
> As such:
> @discardableResult
> public mutating func removeLast() -> Iterator.Element? {
> guard let element = last else {
> return nil
> }
> self = self[startIndex..<index(before: endIndex)]
> return element
> }
>
> It sure seems more "Swifty" to alert at compile time that removing the last item of a collection might fail, and make it return nil as a result.
>
> – Louis D'hauwe
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161017/4713ea7f/attachment.html>
More information about the swift-evolution
mailing list