如果从数组中删除元素并将其存储在如下变量中:
let lastFive = myArray.suffix(5)或者这个:
let lastFive = myArray.dropLast(5)lastFive将是Array<SomeType>.SubSequence,而不是元素类型SomeType。如何使lastFive成为[Element]而不是SubSequence
发布于 2022-01-22 01:59:36
我喜欢使用这个分机:
extension Sequence {
func asArray() -> [Element] {
return Array(self)
}
}也就是说,Collection和Sequence协议都定义了一个sequence()方法。
Sequence.prefix()返回[Element],而Collection.prefix()返回SubSequence。
给定定义如下的Array,我们可以做一些有趣的事情。
let myArray = [1, 2, 3, 4, 5]以下操作是因为编译器知道如何使用Sequence版本的suffix()。
func lastFive() -> [Int] {
return myArray.suffix(5)
}这里我只是使用上面的分机。
func lastFive2() -> [Int] {
return myArray.suffix(5).asArray()
}以下操作也是因为编译器知道如何使用Sequence版本的suffix()。
func lastFive3() -> [Int] {
let suffix: [Int] = myArray.suffix(5)
return suffix
}这不编译,因为编译器假定您想使用Collection版本的suffix()。
func doesNotCompile() -> [Int] {
let suffix = myArray.suffix(5)
return suffix
}https://stackoverflow.com/questions/70808843
复制相似问题