【发布时间】:2019-01-11 06:44:24
【问题描述】:
我的 Objective-C 协议和接口实现如下:
@protocol Animal <NSObject>
-(void)walk;
@end
@interface Cat : NSObject<Animal>
@end
@implementation Cat
-(void)walk{}
@end
@interface Dog : NSObject<Animal>
@end
@implementation Dog
-(void)walk{}
@end
我正在尝试在运行时使用实现协议“Animal”的类的实例。这段代码在 swift 中:
var classesCount = objc_getClassList(nil, 0)
let allClasses = UnsafeMutablePointer<AnyClass?>.allocate(capacity: Int(classesCount))
classesCount = objc_getClassList(AutoreleasingUnsafeMutablePointer(allClasses), classesCount)
for i in 0..<classesCount{
let cls : AnyClass! = allClasses[Int(i)]
if class_conformsToProtocol(cls, Animal.self){
let instance = cls.self.init()
instance.walk()
}
}
尝试了多种方法从 AnyClass、AnyObject 和 NSObject 获取实例。我这样做时面临编译器错误。此代码 sn-p 的错误是:
'required'初始化器'init(arrayLiteral:)'必须由'NSSet'的子类提供。
有什么方法可以获取 'Cat' 和 'Dog' 的实例?
【问题讨论】:
标签: objective-c swift objective-c-runtime