2

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

4

1 回答 1

1

似乎交换了头文件中的两种方法,即

@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)myClass;
@end

成功了。感谢发现它的 Hamish Knight ( https://bugs.swift.org/browse/SR-9456 )。

我将采用这种方法,直到在编译器端正确修复。

于 2018-12-10T15:29:21.387 回答