当我写了一个通用约束时,它只适用于普通类型而不是可选类型。如果我将其作为可选类型调用,会导致编译器错误:Type 'SomeType? does not conform to protocol SomeProtocol'
。
以下是示例代码:
protocol P {}
class C<T> {}
extension C where T: P {
static func test() {}
}
extension Int: P {} // OK
C<Int>.test() // OK
extension Int?: P {} // Fail, but I need it
C<Int?>.test() // Fail, but I need it
更新:
我找到了解决方法。
这是示例代码。
protocol P {}
class C<T> {}
extension C where T: P {
static func test() {}
}
extension Int: P {} // OK
C<Int>.test() // OK
protocol OptionalProtocol {
associatedtype WrappedType
}
extension Optional: OptionalProtocol {
typealias WrappedType = Wrapped
}
extension C where T: OptionalProtocol, T.WrappedType==Int {
static func test() {}
}
C<Int?>.test() // OK now