我需要从 swift 中的可加载包中创建主体类的实例。我对这个类的了解是它符合特定的协议(protocol)(不是 @objc 协议(protocol))并且它不是 NSObject 的子类。这可能吗?
在 Obj-C 中使用 NSObject 非常简单,因为实际上 obj-c 并不关心类型,但是这个 swift,天哪,NSBundle 的principalClass 属性返回 AnyClass?,地球上怎么可能创建该 AnyClass 的实例?输入并告诉它现在它符合 swift 协议(protocol)?
提前致谢
最佳答案
非@objc
协议(protocol)不携带运行时类型信息:这意味着如果关系在编译时未知。另一方面,@objc 协议(protocol)确实携带运行时类型信息。
如果您的协议(protocol)被标记为 @objc
并声明了至少一个初始值设定项,您应该能够执行以下操作:
if let bundle = NSBundle(...) {
if let meta = bundle.principalClass as? MyProtocol.Type {
let obj: MyProtocol = meta(initParam: a, initParam2: b, ...)
}
}
...除了当前的 Swift 编译器将 crash如果您尝试将 AnyType
转换为类似的协议(protocol)类型。不过,如果您可以使用类类型而不是协议(protocol)类型,它就可以工作。
关于ios - 如何在 swift 中从可加载包创建主类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386025/