gpt4 book ai didi

ios - ObjC <-> Swift 桥接和工厂方法

转载 作者:可可西里 更新时间:2023-11-01 01:55:31 24 4
gpt4 key购买 nike

我有一些我想在 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

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

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

关于ios - ObjC <-> Swift 桥接和工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53704499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com