2016-07-29 7 views

答えて

2

種類。 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'

+0

そのメソッドを呼び出すときは、オプションではないので、呼び出す必要があることに注意してください。 –

+1

はい、それは奇妙に見える、IMHO。 – pgb

関連する問題