我有一些我想在 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()编译的工厂方法,但在运行时调用了“错误”的方法。