我有一个具有以下委托方法的快速协议
@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)
我收到无法识别的选择器发送给实例
任何提示是什么问题
答案 0 :(得分:3)
您需要考虑第一个参数的名称:
要么:
-(void)myCuteFuncWithName:(NSString* )name
或:
@objc func myCuteFunc(_ name: NSString)
,然后用self.delegate?.myCuteFunc(str)
调用这只是Objective-C函数名称的工作方式与Swift为其参数命名的方式的产物。 Objective-C无法命名第一个参数(通常由函数名称描述),因此,如果Swift为第一个参数命名,则使用的约定是添加With
加参数名(参数名称大写)到函数名称。通过添加_
,您可以使第一个参数不命名,并且可以更好地转换为Objective-C的命名约定。