相关疑难解决方法(0)

在 Swift 中在运行时创建 Objective-C 类的对象,符合 Objective-C 协议

我有如下 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
Run Code Online (Sandbox Code Playgroud)

我试图在运行时使用实现协议“动物”的类的实例。此代码在 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试了很多方法从 AnyClass、AnyObject 和 NSObject 中获取实例。我这样做时面临编译器错误。此代码片段的错误是:

“必需”初始化程序“init(arrayLiteral:)”必须由“NSSet”的子类提供。

有没有办法获得“猫”和“狗”的实例?

objective-c objective-c-runtime swift

1
推荐指数
1
解决办法
530
查看次数

标签 统计

objective-c ×1

objective-c-runtime ×1

swift ×1