gpt4 book ai didi

objective-c - 如何在具有参数的 Objective-C 中实现快速委托(delegate)方法?

转载 作者:行者123 更新时间:2023-11-28 10:38:48 29 4
gpt4 key购买 nike

我有一个具有以下委托(delegate)方法的快速协议(protocol)

@objc public protocol CuteDelegate: NSObjectProtocol {
@objc func myCuteFunc(name: NSString)
}

我也在swift中声明了委托(delegate)对象

weak var delegate : CuteDelegate?

在我实现上述委托(delegate)方法的 Objective-C Controller 中,如下所示

-(void)myCuteFunc:(NSString* )name{

}

但是在swift controller中调用方法时

 self.delegate?.myCuteFunc(name: str as NSString)

我收到无法识别的选择器发送到实例

任何问题的线索

最佳答案

您需要考虑第一个参数的名称:

任一个:

  1. 让你的 Objective-C 函数 -(void)myCuteFuncWithName:(NSString* )name

或者:

  1. 将协议(protocol)更改为 @objc func myCuteFunc(_ name: NSString) 并使用 self.delegate?.myCuteFunc(str) 调用它

这只是 Objective-C 函数名称工作方式与 Swift 命名其参数的方式的一个产物。 Objective-C 没有办法命名第一个参数(通常用函数名来描述),所以如果 Swift 有第一个参数的标签,使用的约定是添加 With 加上参数名称(参数名称大写)到函数名称。通过添加 _,您可以使第一个参数未命名,这样可以更好地转换为 Objective-C 命名约定。

关于objective-c - 如何在具有参数的 Objective-C 中实现快速委托(delegate)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876537/

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