如何在swift中从可加载包创建主类的实例

时间:2014-12-09 18:20:11

标签: ios swift

我需要在swift中从可加载包中创建一个主类的实例。我所知道的类是它符合特定协议(非@objc协议),它不是NSObject的子类。这有可能吗?

在Obj-C中使用NSObject非常简单,因为实际上,obj-c并不关心类型,但是这个快速的人,NSBundle的principalClass属性返回AnyClass?,它怎么可能在地球创建AnyClass的实例?输入并告诉它现在它符合swift协议?

提前致谢

1 个答案:

答案 0 :(得分:2)

@objc协议不携带运行时类型信息:这意味着如果在编译时未知关系,则不能使用as运算符将类类型转换为协议类型时间。另一方面,@objc协议确实携带运行时类型信息。

如果你的协议被标记为@objc并且至少宣布了一个初始化程序,那么你应该可以这样做:

if let bundle = NSBundle(...) {
    if let meta = bundle.principalClass as? MyProtocol.Type {
        let obj: MyProtocol = meta(initParam: a, initParam2: b, ...)
    }
}

...如果您尝试将AnyType转换为类似的协议类型,则当前Swift编译器将crash。但是,如果你可以使用类类型而不是协议类型,它就可以工作。