我已实现以下功能以向[Float]
添加功能extension CollectionType where Generator.Element == Float, Index == Int, Index.Distance == Int {
func sum() -> Float {
return self.reduce(0,combine: +)
}
var addThem:Float {
return self.reduce(0,combine: +)
}
}
这似乎有效,所以我现在可以这样做
let x:[Float] = [1, 2, 3]
x.sum() // 6
x.addThem // 6
一切都很好。
但是当我把它添加到扩展名
时 func doesSomething() {
var data = self
let background = [Float](count: self.count, repeatedValue: 0)
// Compiler does not like this statement
data = background
}
游乐场抱怨说“[Float]不能转换为Self。”
当我将代码更改为此
时 let background = [Generator.Element](count: self.count, repeatedValue: 0)
Playground响应“无法调用非函数类型的值[Float.Type]。”
然后我尝试了这个
let background:[Generator.Element] = [Float](count: self.count, repeatedValue: 0)
当我指定data = background
时,给出相同的“[Float]不可转换为Self”语法错误。
在上述扩展程序中,如何为变量[Float]
和data
分配self
或等效内容需要做什么?
答案 0 :(得分:0)
如前所述,您可以这样做以使其起作用:
func doesSomething() {
var data = self
let background = [Float](count: self.count, repeatedValue: 0)
// Compiler does not like this statement
data = background as! Self
}
虽然只有在Collection恰好是Float数组时才会有效。
我不相信你能够初始化集合的特定类型,因为(据我所知)没有"必需"收集协议中的初始化者。