我试图调用一个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:^{
}];
答案 0 :(得分:3)
我在Swift
中看到,完成处理程序有两个参数:String
和Bool
,而在Objective-C
调用中,您传递的块没有任何参数。我认为这可能是错误的原因。
尝试:
[[DataAPI new] makeGet:@"" completionHandler:^(NSString* string, BOOl b){
}];
答案 1 :(得分:2)
尝试使用所有更改将其清理并重建以再次生成“ YourModule-Swift.h”。 然后应该是这样的:
[[DataAPI new] makeGet:@"" withCompletionHandler:^(NSString* string, BOOl b){
// your code here
}];
如果仍然出现该错误,则说明“ YourModule-Swift.h”文件未正确生成。检查一下!
答案 2 :(得分:1)
你不应该在闭包中使用!(ImplicitUnwrappedOptional)关键字。这不允许桥接到ObjC代码。只是删除!从关闭。
func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)
到
func makeGet(place:NSString , completionHandler: (String , Bool) -> Void)