我有以下协议
public protocol NumericType {
static func +(lhs: Self, rhs: Self) -> Self
static func addWithOverflow(_ lhs: Self, _ rhs: Self) -> (Self, overflow: Bool)
}
此外,我正在扩展Int以符合它如下
extension Int : NumericType { }
然后我有一个具有以下定义的结构
struct State<T:NumericType> {
let current : T
init(current : T) {
self.current = current
}
static func initial() -> State<T> {
return State(current: 0) // Int is not convertible to T
}
}
答案 0 :(得分:1)
NumericType
不承诺它是ExpressibleByIntegerLiteral
,因此无法将0
(此处假定为Int
)转换为T
。您的协议需要提供一些它知道可以初始化的.zero
(或者它需要符合ExpressibleByIntegerLiteral
)。