ジェネリック型の特定のインスタンスにのみ適用される拡張機能を提供できますか?Swiftでジェネリック型の具体的なインスタンスを拡張する
たとえば、Int?
にメソッドを追加したいとしますが、他のメソッドには追加しません。Optional
。
これは可能ですか?
ジェネリック型の特定のインスタンスにのみ適用される拡張機能を提供できますか?Swiftでジェネリック型の具体的なインスタンスを拡張する
たとえば、Int?
にメソッドを追加したいとしますが、他のメソッドには追加しません。Optional
。
これは可能ですか?
種類。 Optional
はプロトコルなので、拡張機能を作成して制約することができます。ただし、制約は型にはできませんが、プロトコル上にある必要があります。
これは動作します:
extension Optional where Wrapped: SignedIntegerType {
func test() -> Int {
return 0
}
}
、その後、あなたがそれを使用することができます。
let a:Int? = nil
a.test()
しかし、あなたがしようとした場合を:
extension Optional where Wrapped: Int {
func test() -> Int {
return 0
}
}
あなたがエラーを取得します:
type 'Wrapped' constrained to non-protocol type 'Int'
そのメソッドを呼び出すときは、オプションではないので、呼び出す必要があることに注意してください。 –
はい、それは奇妙に見える、IMHO。 – pgb
Int自身を拡張する –