0
我已經實現了以下功能添加到[浮點]如何擴展特定的數組類型,例如[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
}
遊樂場抱怨說,「[浮點]是無法轉換爲自我。」
當我修改代碼,這
let background = [Generator.Element](count: self.count, repeatedValue: 0)
遊樂場響應「不能調用非功能型[Float.Type]的價值。」當我給你data = background
然後我想這
let background:[Generator.Element] = [Float](count: self.count, repeatedValue: 0)
可以得到相同的「[浮點]是無法轉換爲自我」語法錯誤。
我需要做些什麼來分配[Float]
或等效變量data
以及上述擴展中的self
是什麼?
因爲self只是一個collectionType,它是一個協議,所以self的實際類型不能保證是一個Array。一個collectionType可以是Array或者Dictionary或者任何符合CollectionType的其他類型。 –
難道你不能'var data = self as! [Float]' – Santosh
http://stackoverflow.com/a/28288619/2303865 –