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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution