使用完成处理程序(闭包)语法从objective-c文件调用swift文件中的函数
Posted
技术标签:
【中文标题】使用完成处理程序(闭包)语法从objective-c文件调用swift文件中的函数【英文标题】:call function in swift file from objective-c file with completion handler (closure) syntax 【发布时间】:2018-11-30 14:36:35 【问题描述】:我在从 swift 函数中有闭包的 Objective-c 文件中调用 swift 文件中的函数时遇到问题。
这是 Swift 函数
//In Utilities class
static func getString(query: NSString, completion: @escaping (_ response: NSString) -> Void)
completion("hello")
这是我尝试在 Objective-c 类中调用它的方式:
[Utilities getString:@"hi there" completion:^(NSString* response)
NSLog(response);
];
我收到错误“选择器'getString:completion:'没有已知的类方法”
上面有什么问题?
注意:我可以在没有闭包/完成块的情况下调用更简单的方法。
in swift class
static func myTest ()
print("function called")
从objective-c类调用:
[Utilities myTest];
所以问题似乎与闭包语法有关。
【问题讨论】:
自动补全说明了什么?这不应该是getStringQuery:completion
吗?缺少@object?
达蒙,我看了那个问题。这是一个不同的错误。不一样。该问题的问题和解决方案也与选项有关
【参考方案1】:
用
包围班级@objcMembers class Utilities:NSObject
或函数
@objc class func getString(query: NSString, completion: @escaping (_ response: NSString) -> Void)
[Utilities getStringWithQuery:@"hi there" completion:^(NSString* response)
NSLog(response);
];
【讨论】:
我目前围绕类名如下:@objc class Utilities:NSObject 问题出在函数中,所以请按照上述任何一个 我尝试在函数前面加上@objc 类而不是静态和相同的错误 完全复制了您的代码,但得到了同样的错误。不知道您用 withQuery 代替(查询)...在两种语言之间进行翻译。这是规定吗? 好的。让它工作。不知道With,但这似乎已经解决了。以上是关于使用完成处理程序(闭包)语法从objective-c文件调用swift文件中的函数的主要内容,如果未能解决你的问题,请参考以下文章