繁体   English   中英

在目标c中调用Swift完成处理程序

[英]Call Swift completion handler in objective c

我试图调用一个swift方法,它实现如下: -

@objc class DataAPI: NSObject {
    func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)
    {
        var str:String = ""
        let manager = AFHTTPSessionManager()

        manager.GET("https://api.com", parameters: nil, success:
              { (operation, responseObject) -> Void in
                        str = "JSON:  \(responseObject!.description)"
                        print(str)

                        completionHandler(str,false)   //str as response json, false as error value

            },
                    failure: { (operation,error: NSError!) in
                        str = "Error: \(error.localizedDescription)"
                        completionHandler("Error",true)   
        })

    }}

现在当我试图在我的Objective C类中调用它时,它抛出一个错误“没有可见的DataAPI接口声明选择器makeGet:completionHandler”

这就是我在Objective C类中调用方法的方法: -

[[DataAPI  new] makeGet:@"" completionHandler:^{
}];

我在Swift看到,完成处理程序有两个参数: StringBool而在Objective-C调用中,你传递一个没有任何参数的块。 我认为这可能是错误的原因。

尝试:

[[DataAPI  new] makeGet:@"" completionHandler:^(NSString* string, BOOl b){
}];

尝试清理并重建以再次生成“YourModule-Swift.h”并进行所有更改。 那应该是这样的:

[[DataAPI  new] makeGet:@"" withCompletionHandler:^(NSString* string, BOOl b){
// your code here    
}];

如果仍然出现该错误,则表示尚未正确生成“YourModule-Swift.h”文件。 核实!

你不应该在闭包中使用!(ImplicitUnwrappedOptional)关键字。 这不允许桥接到ObjC代码。 只是删除! 从关闭。

func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)

func makeGet(place:NSString , completionHandler: (String , Bool) -> Void)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM