使用完成处理程序(闭​​包)语法从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文件中的函数的主要内容,如果未能解决你的问题,请参考以下文章

我可以从 Main 构造函数中关闭程序吗?

使用完成处理程序按顺序执行操作

在 Access 中是不是可以从全局函数中关闭变量?

完成处理程序 swift 3 从函数返回一个变量

Android:如何从活动活动中关闭前台活动?

如何在 Kotlin 中关闭 Android 应用程序