Int不能转换为T.

时间:2016-10-14 19:39:30

标签: ios swift swift3

我有以下协议

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
    }
}

1 个答案:

答案 0 :(得分:1)

NumericType不承诺它是ExpressibleByIntegerLiteral,因此无法将0(此处假定为Int)转换为T。您的协议需要提供一些它知道可以初始化的.zero(或者它需要符合ExpressibleByIntegerLiteral)。