Swift 3:将Array <double>转换为Array <float>扩展名

时间:2017-08-16 00:36:54

标签: swift compilation

extension Array where Element : Double {
    public var asArrayOfFloat: [Float] {
        return self.map { return Float(other:$0) } // compiler error
    }
}

我收到编译错误抱怨Float(other:$0)&#34;参数标签&#39;(其他:)&#39;不匹配任何可用的重载。&#34;但是,$0Double,并且有一个Float.init(other:Double)初始值设定项。问题是什么?

编辑:更改为Float($0)会产生不同的编译错误:&#34;模糊地使用&#39; init&#39;&#34;,并且有16位候选人。

编辑:Float.init(other:Double)最初由编译器建议,快照:enter image description here

2 个答案:

答案 0 :(得分:3)

问题出在where Element : Double ...这需要重写为where Element == Double(请注意使用==代替:),因为Double不是协议而是类型。现在编译按照建议使用Float($0)

答案 1 :(得分:1)

摆脱SELECT my_table.field1 as field1, (EXISTS (SELECT 1 FROM another_table WHERE id = field1)) as does_exist FROM my_table 标签。如果有field1覆盖使用该标签(FWIW,我没有看到),那么它不是必需的标签。