gpt4 book ai didi

objective-c - 从 Swift 调用名为 `init` 的 Obj-C 类方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:20 25 4
gpt4 key购买 nike

我在我的 Swift 4.1 代码中使用了第 3 方库,它有一个 Obj-C 头文件和一个名为 init() 的类级方法。当我尝试调用它时,编译器感到困惑,并说我是想使用实例初始化程序还是这个静态初始化方法是不明确的,如下所示:

My3rdPartyClass.init()//错误:“init()”的使用不明确

My3rdPartyClass.h 文件中:

@interface My3rdPartyClass : NSObject

+(void)init;

@end

最佳答案

出现歧义(在 Swift <= 4.1 中)因为类方法都是

+ (void)init;

NSObject的初始化方法

- (instancetype)init

从 Swift 调用为 My3rdPartyClass.init()。可能的解决方案是:

  • 重命名 Objective-C 类方法。
  • 用不同的 Swift 名称注释函数声明:

    +(void)init NS_SWIFT_NAME(classInit());

    这让 Objective-C 接口(interface)保持不变,但函数可以从 Swift 调用为

    OClass.classInit()
  • 如果无法修改 Objective-C 头文件,则你仍然可以从 Swift 调用该函数作为

    My3rdPartyClass.init() as Void

    Void 返回类型解决了歧义。

Swift 4.2 (Xcode 10) 开始,您可以将类方法调用为

OClass.`init`()

Objective-C API 没有任何变化(归因于@哈米什)。反引号告诉编译器你的意思是成员函数,而不是初始化程序。

关于objective-c - 从 Swift 调用名为 `init` 的 Obj-C 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469874/

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