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

Reply via email to