如果您想返回第一个和最后一个元素,那么假设输入参数是某种类型的数组可能是安全的。
所以你可以通过这种方式实现你的功能
func firstAndLast<T>(list:[T]) -> (first:T, last:T)? {
guard let first = list.first, last = list.last else { return nil }
return (first, last)
}
该函数确实返回一个包含 2 个元素的元组,它们都具有相同类型的输入数组的通用元素。返回的元组是一个选项,因为如果数组为空,则返回 nil。
例子
let nums = firstAndLast([1,2,3,4])
let words = firstAndLast(["One", "Two", "Three"])
您可以验证数组中通用元素的类型成为元组内元素的类型。
在上面的例子nums
中被推断为(Int, Int)?
和words
(Words, Words)?
更多示例
let emptyList: [String] = []
firstAndLast(emptyList) // nil
扩大
最后,您还可以将此代码编写为 Array 的扩展。
extension Array {
var firstAndLast: (first:Element, last:Element)? {
guard let first = self.first, last = self.last else { return nil }
return (first, last)
}
}
现在你可以写
let aCoupleOfShows = ["Breaking Bad", "Better Call Saul", "Mr Robot"].firstAndLast
同样,如果您检查常量的类型,aCoupleOfShows
您会看到它是一个(first: String, last: String)?
. Swift 确实自动推断出正确的类型。
最后一个例子
在评论中你说你想要一个字符串的第一个和最后一个字符。如果您使用上面的扩展名,这是代码
if let chars = Array("Hello world".characters).firstAndLast {
print("First char is \(chars.first), last char is \(chars.last) ")
}
//>> First char is H, last char is d