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

Viz*_*llx 5 xcode objective-c ios completionhandler swift

我正在尝试调用一个 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)   
        })

    }}
Run Code Online (Sandbox Code Playgroud)

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

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

[[DataAPI  new] makeGet:@"" completionHandler:^{
}];
Run Code Online (Sandbox Code Playgroud)

小智 2

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

func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)
Run Code Online (Sandbox Code Playgroud)

func makeGet(place:NSString , completionHandler: (String , Bool) -> Void)
Run Code Online (Sandbox Code Playgroud)