2017-08-16 35 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)一起工作。