2016-10-14 4 views
0

У меня есть следующий протоколInt не конвертируется в T

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

ответ

2

NumericType не обещает, что это ExpressibleByIntegerLiteral, поэтому нет способа конвертировать 0 (который предполагается здесь Int) до T. В вашем протоколе необходимо указать .zero, что он знает, что он может инициализировать (или должен соответствовать ExpressibleByIntegerLiteral).