我有一些Objective-C类,我想从Swift中使用它 . 由于超出此问题范围的原因,我的类 init
方法被标记为不可用 . 相反,有一种工厂方法 . 这简化了我的课程:
@interface MyClass : NSObject
+ (instancetype)myClass;
- (instancetype)init NS_UNAVAILABLE;
@end
当我在Swift中使用它时,我可以做 let x = MyClass()
这很好,因为根据桥接规则,编译器会尝试将工厂方法映射到普通初始化器 . 问题是调用"unavailable" init
方法而不是工厂方法 .
如何让Swift使用工厂方法?
Additional experiments:
我确定 NS_UNAVAILABLE
有效,因为如果我这样做:
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
@end
然后在Swift方面,我得到了预期的 'init()' is unavailable
错误消息 .
这意味着它是允许 let x = MyClass()
编译的工厂方法,但在运行时调用"wrong"方法 .
1 回答
似乎在头文件中交换两个方法,即
诀窍 . 感谢Hamish Knight找到了它(https://bugs.swift.org/browse/SR-9456) .
我将采用这种方法,直到在编译器端正确修复它 .