【问题标题】:Swift 3: Convert Array<Double> to Array<Float> extensionSwift 3:将 Array<Double> 转换为 Array<Float> 扩展
【发布时间】:2017-08-16 09:00:55
【问题描述】:
extension Array where Element : Double {
    public var asArrayOfFloat: [Float] {
        return self.map { return Float(other:$0) } // compiler error
    }
}

我收到一个编译器错误,抱怨 Float(other:$0)“参数标签 '(other:)' 不匹配任何可用的重载。”但是,$0 是一个 Double,并且有一个 Float.init(other:Double) 初始化器。有什么问题?

编辑:更改为 Float($0) 会产生不同的编译错误:“模糊使用 'init'”,并且有 16 个候选者。

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

【问题讨论】:

    标签: swift compilation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      去掉other: 标签。如果有使用该标签的init 覆盖(FWIW,我没有看到),那么它不是必需的标签。

      【讨论】:

        猜你喜欢
        • 2015-01-09
        • 2019-07-12
        • 2020-07-14
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        相关资源
        最近更新 更多