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

时间:2018-08-16 11:58:34

标签: objective-c swift

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

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

我也迅速声明了委托对象

weak var delegate : CuteDelegate?

在我要实现上述委托方法的目标C控制器中,如下所示

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

}

但是在swift控制器中调用该方法

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

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

任何提示是什么问题

1 个答案:

答案 0 :(得分:3)

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

要么:

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

或:

  1. 将协议更改为@objc func myCuteFunc(_ name: NSString),然后用self.delegate?.myCuteFunc(str)调用

这只是Objective-C函数名称的工作方式与Swift为其参数命名的方式的产物。 Objective-C无法命名第一个参数(通常由函数名称描述),因此,如果Swift为第一个参数命名,则使用的约定是添加With加参数名(参数名称大写)到函数名称。通过添加_,您可以使第一个参数不命名,并且可以更好地转换为Objective-C的命名约定。