gpt4 book ai didi

swift - 如何在 Objective-c 中声明/实现带有可为空指针参数的 Swift 函数?

转载 作者:行者123 更新时间:2023-11-28 12:56:23 33 4
gpt4 key购买 nike

我的 Swift 代码是这样的:

@objc protocol MyDelegate {
func buttonPressed(buttonNum: Int, packet: Packet?)
}

然后我的委托(delegate)的 objective-c 代码是这样的:

- (void)buttonPressed:(NSInteger)buttonNum :(Packet * _Nullable) packet {
}

但我收到“功能未实现”警告。我的实验似乎表明该可空指针有问题。 IE。如果没有“?”在 Swift 原型(prototype)声明中并且在 Object-c 函数中没有“_Nullable”那么一切都很好。

有谁知道我需要在 Objective-c 端做什么才能为该原型(prototype)实现该功能?

最佳答案

问题不是由于参数的可空性,而是由于选择器名称。

func buttonPressed(buttonNum: Int, packet: Packet?)

应该得到一个

buttonPressed:packet:

objective-c 函数。你的是 buttonPressed:: - 第二个参数没有标签。

造成混淆的原因可能是 Swift 会自动推断以第二个参数开头的标签 - 如果未指定标签,则假定标签为参数名称。这就是为什么在 Swift 中您需要将协议(protocol)函数调用为 buttonPressed(arg1, packet: arg2)

现在您可以将 packet 标签添加到 Objective-C 选择器,也可以将其从 Swift 函数声明中删除,如下所示:

func buttonPressed(buttonNum: Int, _ packet: Packet?)

然后您可以从 Swift 调用它,例如 buttonPressed(arg1, arg2)。这取决于您选择哪种方法,尽管我建议您使用标记的方法,因为它更清楚,至少在 Objective-C 中是这样。

关于swift - 如何在 Objective-c 中声明/实现带有可为空指针参数的 Swift 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34937526/

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