2016-09-28 9 views
0
迅速

で、より具体的なタイプのいずれかが、私は、プロトコルます意気消沈

protocol TestProtocol { 
    func test() -> Int 
} 

を、私はINTとオプションは、プロトコルに準拠するために拡張します他のタイプはこのプロトコルに準拠しています。

私は、変数の特定のタイプを与える場合、それは[OK]を動作します:

let fff: Int? = 2 
print(fff.test()) 

しかし、変数の型は、任意のある場合:

let kkk: Any = fff 
print(kkk.test()) 

KKKの真のタイプ準拠プロトコルTestProtocolをチェックして取得する方法結果。

+0

、 'Optional'はTestProtocol''に準拠していません。 'Optional'が準拠しているものをラップすると' test() 'メソッドがありますが、それは' Optional'自体が適合するのに十分ではありません。 Swiftには条件付きの適合はありません。あなたは "それらの要素がEquatableの場合、配列は等価である"と言うことはできません。詳細については、https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-を参照してください。 –

+0

ありがとうございました!あなたは私の問題を解決しました! – leizh00701

答えて

1

オプションの使用は、結合:この例では

let kkk: Any = 42 // Actually an Int 
if let k = kkk as? TestProtocol { 
    print(k.test()) 
} else { 
    print("kkk does not conform to TestProtocol") 
} 
関連する問題