我想从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()
进行编译,但是在运行时将调用“错误”方法。
答案 0 :(得分:1)
似乎交换了头文件中的两个方法,即
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)myClass;
@end
可以解决问题。感谢Hamish Knight找到了(https://bugs.swift.org/browse/SR-9456)。
我将继续使用这种方法,直到在编译器端将其正确修复为止。