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

Checking if Any.Type conforms to a protocol in Swift

我想检查 Any.Type 的给定值是否符合 Swift 中的协议。似乎可以通过调用 class_conformsToProtocol() 来检查基于 @objc 的协议,但我不知道如何使用纯 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

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

谢谢...

函数 class_conformsToProtocol(_:_:) 是一个 Objective-C 运行时库函数,因此要使用它,提供的参数必须具有对 Objective C.

的表示

就像在使用 #selector() 提供选择器时一样,我们必须在方法声明之前提供 @objc 这样,该特定方法可以在 Objective-C 中表示。

您可以在 Objective-C Runtime

的 Apple 文档中找到更多相关信息

要检查 class 是否确认协议,您可以试试这个:

protocol MySwiftProtocol: AnyObject {
}

class MySwiftClass: MySwiftProtocol {
}

if let mySwiftProtocol = MySwiftClass() as? MySwiftProtocol {
    //do stuff if confirms protocol
} else {
    //do stuff if doesn't confirm protocol
}

要检查纯 Swift 代码,您可以这样做:

protocol MySwiftProtocol: AnyObject {
}

class MySwiftClass: MySwiftProtocol {
}

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

或更简单地说:

if MySwiftClass.self is MySwiftProtocol.Type {