检查 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 {
我想检查 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 {