2017-08-16 67 views
1
extension Array where Element : Double { 
    public var asArrayOfFloat: [Float] { 
     return self.map { return Float(other:$0) } // compiler error 
    } 
} 

我得到一個編譯錯誤抱怨Float(other:$0)「參數標籤‘(其他:)’不匹配任何可用的過載。」但是,$0Double,並且有一個Float.init(other:Double)初始值設定項。有什麼問題?斯威夫特3:轉換陣列<Double>到陣列<Float>擴展

編輯:更改爲Float($0)創建了一個不同的編譯錯誤:「模糊使用'init'」,並有16個候選。

編輯:Float.init(other:Double)最初是由編譯器,快照建議:enter image description here

回答

1

擺脫other:標籤。如果有一個init覆蓋使用該標籤(FWIW,我沒有看到一個),那麼它不是所需的標籤。

+0

沒有工作,一個不同的問題。 – andrewz

3

問題同where Element : Double ...這需要改寫爲where Element == Double(請注意使用的==代替:),因爲Double並不是一個協議,而是一個類型。按照建議現在編譯與Float($0)一起工作。