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@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@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to