【发布时间】:2018-12-10 11:15:16
【问题描述】:
我有一些我想在 Swift 中使用的 Objective-C 类。
由于超出此问题范围的原因,我的类 init 方法被标记为不可用。相反,有一个工厂方法。这是对我的班级的简化:
@interface MyClass : NSObject
+ (instancetype)myClass;
- (instancetype)init NS_UNAVAILABLE;
@end
当我在 Swift 中使用它时,我可以使用 let x = MyClass() 这很好,因为根据桥接规则,编译器会尝试将工厂方法映射到普通的初始化程序。问题是调用了“不可用”init 方法而不是工厂方法。
如何让 Swift 使用工厂方法?
其他实验:
我确定 NS_UNAVAILABLE 有效,因为如果我这样做:
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
@end
然后在 Swift 方面,我收到了预期的 'init()' is unavailable 错误消息。
这意味着它是允许let x = MyClass() 编译的工厂方法,但在运行时调用了“错误”的方法。
【问题讨论】:
-
看起来像这些工具中的错误。如果我是,我只需将工厂方法重命名为其他任何名称并在 Swift 中使用它,例如
MyClass.instance() -
是的,我可以这样做,但如果可能的话,我更愿意允许来自 Swift 的标准
_ = MyClass()。另一种解决方案是从 init 调用工厂方法,但这意味着(除了代码味道之外)完成了 2 次分配。 -
这似乎是一个编译器错误,我会报告它,我只是想知道是否有人遇到它并设法解决它:)
标签: ios objective-c swift