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不可能是这种情况。
谢谢...
要检查纯 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)