一般的な制約を記述すると、通常の型にのみ適合しますが、オプションの型には適合しません。私はオプションの型:Type 'SomeType? does not conform to protocol SomeProtocol'
と呼びますが、それはコンパイラエラーにつながります。ここでSwiftのオプションタイプのジェネリック制約を書き込む方法は?
はサンプルコードです:
更新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
[Swiftプロトコル準拠の拡張に型制約を追加することは可能ですか?](https://stackoverflow.com/questions/33332613/is-it-possible-to-add-type-constraints-to -a-swift-protocol-conformance-extension) –