2017-11-15 5 views
1
protocol A { } 
class B: A { } 

func f(x: Any) { 
    print(x is A) 
} 
let x: B? = B() 
f(x: x) // false 

私はこれが代わりにtrueであると思います。 Swiftのバグですか?例次のSwift任意のメソッド引数プロトコル準拠失われた

正常に動作してtrueを返す:

// 1 
func f(x: Any) { 
    print(x is A) 
} 
let x: B = B() // not optional 
f(x: x) // true 

// 2 
func f(x: Any) { 
    print(x is B) // check for B 
} 
let x: B? = B() 
f(x: x) // true 
+1

[これはバグです](https://bugs.swift.org/browse/SR-6279)。 – Hamish

答えて

0

あなたのインスタンスは、あなたがいずれかのことができ、使用プロトコルAに準拠しているかどうかをテストする場合:

func<T>(x: T) { 
    print(x is A) 
} 

それとも一緒に両方の機能を使用します。

func(x: Any) { 
    print(x is A) 
} 

func(x: Optional<Any>) { 
    print(x is A) 
} 
関連する問題