Swift 3では、汎用変数型がクラス(AnyObject
)であるかどうかをチェックできなくなりました。次のコードは、特定のタイプT
および渡された値が構造体でありクラスではなくても、isObject
のtrue
を返します。 Swift 2.3と2.2では期待通りに動作し、isObject
はfalse
です。汎用変数がAnyObject型であるかどうかをテストする方法
struct Foo<T>
{
var value: Any?
var isObject: Bool = false
init (val: T?)
{
if val != nil
{
// following line shows warnings in Swift 3
// conditional cast from 'T?' to 'AnyObject' always succeeds
// 'is' cast is always true
isObject = val is AnyObject
self.value = val
}
}
}
struct Bar
{
var bar = 0
}
let b = Foo<Bar>(val: Bar())
print(b.isObject) // -> true
スウィフト3で正しく動作させるにはどうすればよいですか?スウィフト3では
でも '90 is AnyObject'は' true'を返します。私のバグのように聞こえる。 – MirekE
関連:[AnyObjectはXcode8 beta6で動作していませんか?](http://stackoverflow.com/questions/39033194/anyobject-not-working-in-xcode8-beta6) – Hamish