检查 Any.Type 是否符合 Swift 中的协议

Kaz*_*awa 2 swift swift-protocols

我喜欢检查给定的值是否Any.Type符合 Swift 中的协议。似乎@objc可以通过调用来检查基于的协议class_conformsToProtocol(),但我不知道如何使用纯 swift 协议进行检查。

// ObjC

@objc protocol MyObjcProtocol {
}

class MyObjcClass: NSObject, MyObjcProtocol {
}

class_conformsToProtocol(MyObjcClass.self, MyObjcProtocol.self) // true

// Swift

protocol MySwiftProtocol: AnyObject {
}

class MySwiftClass: MySwiftProtocol {
}

class_conformsToProtocol(MySwiftClass.self, MySwiftProtocol.self) // error
Run Code Online (Sandbox Code Playgroud)

如果是实例的情况,我可以检查if let object = object as? MySwiftProtocol { ... }方法的类型,但Any.Type不可能是这种情况。

谢谢...

rma*_*ddy 7

要检查纯 Swift 代码,您可以执行以下操作:

protocol MySwiftProtocol: AnyObject {
}

class MySwiftClass: MySwiftProtocol {
}

if MySwiftClass.self as? MySwiftProtocol.Type != nil {
    print("conforms")
} else {
    print("does not conform")
}
Run Code Online (Sandbox Code Playgroud)

或更简单地说:

if MySwiftClass.self is MySwiftProtocol.Type {
Run Code Online (Sandbox Code Playgroud)