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

标签 ios swift

我需要从 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/

相关文章:

ios - My Verizon Mobile 应用程序如何知道设备电话号码?

ios - 如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?

iphone - 如何使用翻转动画显示 MapView 选项?

ios - 以编程方式对 1 个场景中的 2 个 UISwitches 进行编码

jquery - translate ease for translate only 首次在 iPhone 上流畅

iphone - UIGesture 识别器,区分单击和双击。

swift - 我可以在 SKCamera 中制作无限滚动背景吗?

iOS UICollectionReusableView 位于滚动指示器之上

swift - 如何根据 bool 属性对 Realm 结果进行排序

swift - 为什么AVPlayer先下载而不是直播?