25

Xcode8 beta6 では、次のコードで警告が発生します: 'is' テストは常に true です。しかし、それはパスを印刷しません。

    struct TestStruct {
    }

    //warning: 'is' test is always true
    if TestStruct() is AnyObject {
        print("pass")
    }

そして、次のコードは警告を引き起こします: 'T' から 'AnyObject' への条件付きキャストは常に成功します

public static func register<T>(_ protocolType: T.Type, observer: T) {

    //Warning: Conditional cast from 'T' to 'AnyObject' always succeeds
    guard let object = observer as? AnyObject else {
        fatalError("expecting reference type but found value type: \(observer)")
    }
    //...
}
4

2 に答える 2

6

簡単に言えば。

値に参照型があるかどうかを確認するには:

if type(of: value) is AnyClass {
    // ...
}

型が参照型かどうかを確認するには:

if SomeType.self is AnyClass {
   // ...
}

より役立つ回答:

于 2016-11-10T23:07:42.283 に答える