我想从 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()
编译,但在运行时调用“错误”的方法。
看来是交换了头文件中的两个方法,即
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)myClass;
@end
就可以了。感谢哈米什·奈特发现了它(https://bugs.swift.org/browse/SR-9456 https://bugs.swift.org/browse/SR-9456).
我将采用这种方法,直到在编译器端正确修复该问题为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)