在 objective 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 class 中调用它时,它抛出错误 "No Visible interface for DataAPI declares selector makeGet:completionHandler"
这就是我在 Objective C class 中调用方法的方式:-
[[DataAPI new] makeGet:@"" completionHandler:^{
}];
我看到在 Swift
中完成处理程序有两个参数:String
和 Bool
而在你的 Objective-C
调用中你传递了一个没有任何参数的块。我认为这可能是错误的原因。
尝试:
[[DataAPI new] makeGet:@"" completionHandler:^(NSString* string, BOOl b){
}];
您不应在闭包中使用 !(ImplicitUnwrappedOptional) 关键字。那不允许桥接到 ObjC 代码。只需删除!来自闭包。
func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)
至
func makeGet(place:NSString , completionHandler: (String , Bool) -> Void)
尝试清理并重建以使用所有更改再次生成 "YourModule-Swift.h"。
那么它应该是这样的:
[[DataAPI new] makeGet:@"" withCompletionHandler:^(NSString* string, BOOl b){
// your code here
}];
如果您仍然收到该错误,则您的 "YourModule-Swift.h" 文件未正确生成。检查一下!
我正在尝试调用一个 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 class 中调用它时,它抛出错误 "No Visible interface for DataAPI declares selector makeGet:completionHandler"
这就是我在 Objective C class 中调用方法的方式:-
[[DataAPI new] makeGet:@"" completionHandler:^{
}];
我看到在 Swift
中完成处理程序有两个参数:String
和 Bool
而在你的 Objective-C
调用中你传递了一个没有任何参数的块。我认为这可能是错误的原因。
尝试:
[[DataAPI new] makeGet:@"" completionHandler:^(NSString* string, BOOl b){
}];
您不应在闭包中使用 !(ImplicitUnwrappedOptional) 关键字。那不允许桥接到 ObjC 代码。只需删除!来自闭包。
func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void)
至
func makeGet(place:NSString , completionHandler: (String , Bool) -> Void)
尝试清理并重建以使用所有更改再次生成 "YourModule-Swift.h"。 那么它应该是这样的:
[[DataAPI new] makeGet:@"" withCompletionHandler:^(NSString* string, BOOl b){
// your code here
}];
如果您仍然收到该错误,则您的 "YourModule-Swift.h" 文件未正确生成。检查一下!