【发布时间】:2020-07-09 05:22:21
【问题描述】:
我想实现以下但无法修复错误:“非标称类型'元素'不支持显式初始化”
最初的尝试:
public extension Array where Element: FloatingPointMathType {
func mean<Element>() -> Element {
let sum: Element = reduce (0.0, +) as! Element
return sum / Element(count) // ==> Non-nominal type 'Element' does not support explicit initialization
}
}
另外,我想知道为什么它需要 as! Element 演员表
作为比较,如下本地函数编译没有问题:
func mean<Element: FloatingPointMathType>(_ e: [Element]) -> Element {
let sum: Element = e.reduce (0.0, +)
return sum / Element(e.count)
}
【问题讨论】:
-
FloatingPointMathType是新协议吗?你的 Swift 版本是什么?请注意,mean<Element: FloatingPointMathType>在集合扩展中非常具有误导性。您正在创建一个与集合 Element 无关的新泛型类型 -
Swift 5 / Xcode 11.3.1