我有一个具有以下委托方法的快速协议
@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)
我将无法识别的选择器发送到实例
任何线索是什么问题
您需要考虑第一个参数的名称:
任何一个:
-(void)myCuteFuncWithName:(NSString* )name
或者:
@objc func myCuteFunc(_ name: NSString)
并调用它self.delegate?.myCuteFunc(str)
这只是 Objective-C 函数名称工作方式与 Swift 为其参数命名方式的产物。Objective-C 没有办法命名第一个参数(通常由函数名来描述),所以如果 Swift 有第一个参数的标签,则使用的约定是添加With
加上参数名称(参数名称大写)到函数名。通过添加_
,您可以使第一个参数未命名,并且可以更好地转换为 Objective-C 命名约定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句