【发布时间】:2015-03-06 16:22:40
【问题描述】:
我想创建一个这样做的数组扩展:-
func pairs(tmp: [Any]) -> [(Any, Any)] {
return Array(Zip2(tmp[0..<tmp.count-1], tmp[1..<tmp.count]))
}
效果很好,但是如果我将它包装在扩展数组中:-
extension Array {
func pairs<T>() -> [(T, T)] {
return Array(Zip2(self[0..<self.count-1], self[1..<self.count]))
}
}
编译器抱怨:-
Cannot find an initializer for type 'Array<T>' that accepts an argument list of type '(Zip2<Slice<T>, Slice<T>>)'
(另外,方法签名是否正确?仍在尝试了解泛型语法)
【问题讨论】:
-
顺便说一句,你可以把这个写得更简洁一点,
func pairs() -> [(T, T)] { return Array<(T, T)>(zip(self, dropFirst(self))) }——zip 只会走两个序列中最短的那个。 -
谢谢;总是很高兴看到更整洁的做事方式