Ios 在swift中调用Objective-c函数
我试图在我的swift应用程序中实现CometChat。我通过桥接头成功导入了Objective-c框架。但现在我一直在尝试从swift调用Objective-C方法 这是我要调用的接口中的方法:Ios 在swift中调用Objective-c函数,ios,objective-c,swift,Ios,Objective C,Swift,我试图在我的swift应用程序中实现CometChat。我通过桥接头成功导入了Objective-c框架。但现在我一直在尝试从swift调用Objective-C方法 这是我要调用的接口中的方法: - (void)loginWithURL:(NSString *)siteURL username:(NSString *)username password:(NSString *)password success:(void
- (void)loginWithURL:(NSString *)siteURL
username:(NSString *)username
password:(NSString *)password
success:(void(^)(NSDictionary *response))success
failure:(void(^)(NSError *error))failure;
这就是从Objective-C调用方法的方式:
[cometChat loginWithURL:@"localhost/cometchat/" username:usernameTextField.text password:passwordTextField.text success:^(NSDictionary *response) {
NSLog(@"SDK log : Username/Password Login Success %@",response);
[self handleLogin];
} failure:^(NSError *error) {
NSLog(@"SDK log : Username/Password Login Error%@",error);
[self handleLoginError:@[@0,error]];
}];
到目前为止,我有:
cometChat.loginWithURL("localhost/cometchat/", username: EmailField.text, password: PasswordField.text){
(success: [NSDictionary], failure:NSError) in {
println("did i make it here?")
}
}
问题是,它说缺少“成功”的论点,但对我来说,当它清楚地返回答案时,它如何成为论点,这是一个谜。我想知道如何组合这个方法调用。我还使用了objectivec2swift转换器,但没有任何帮助。另外,我不知道在@[@0,错误]
我知道这是一个初学者的问题,但我已经在这上面浪费了一整天,因为我找不到任何关于如何从swift调用这种“复杂”Obj-C方法的教程。当您查看Objective-C签名时,您会看到该方法需要两个闭包:
成功
是一个需要字典的无效函数,而failure
是一个接受错误的无效函数
在Swift代码中只有一个闭包:一个接受字典和错误的void函数
您需要将Objective-C方法更改为只接受一个闭包,或者将Swift代码更改为提供两个闭包。当您查看Objective-C签名时,您会看到该方法接受两个闭包:
success
是一个接受字典的无效函数,而failure
是一个接受错误的无效函数
在Swift代码中只有一个闭包:一个接受字典和错误的void函数
您需要将Objective-C方法更改为只接受一个闭包,或者将Swift代码更改为提供两个闭包。尝试以下方法:-
cometChat.loginWithURL("localhost/cometchat/", username: "abc", password: "123", success: { (response) -> Void in
print("SDK log : Username/Password Login Success \(response)")
}) { ( error) -> Void in
print("SDK log : Username/Password Login Error \(error)")
}
试试这个:-
cometChat.loginWithURL("localhost/cometchat/", username: "abc", password: "123", success: { (response) -> Void in
print("SDK log : Username/Password Login Success \(response)")
}) { ( error) -> Void in
print("SDK log : Username/Password Login Error \(error)")
}
调用函数时,最后一个参数是块/闭包,则可以在{}中写入函数调用后的最后一个参数。这仅适用于最后一个块
无论如何,您正试图通过一个包含两个参数success和failure的闭包。您需要传递两个闭包,一个作为函数的成功参数传递参数响应,另一个作为函数的失败参数传递,或者在函数后面传递参数错误 调用函数时,最后一个参数是块/闭包,则可以在{}中写入函数调用后的最后一个参数。这仅适用于最后一个块 无论如何,您正试图通过一个包含两个参数success和failure的闭包。您需要传递两个闭包,一个作为函数的成功参数传递参数响应,另一个作为函数的失败参数传递,或者在函数后面传递参数错误 所以类似于(现在无法访问mac进行测试):cometChat.loginWithURL(“localhost/cometChat/”,用户名:EmailField.text,密码:PasswordField.text){(成功:[NSDictionary])在{println(“我在这里做了吗?”)},(失败:NSError)中,{}语法是object.method(value1,param2:value2,param3:value3,param4:value4,param5:value5)。这不是你正在写的。阅读Swift手册。你似乎还没有学会语言,只是在复制示例;这不起作用。再次,阅读并理解这本书。例如(现在没有访问mac的权限进行测试):cometChat.loginWithURL(“localhost/cometchat/”,用户名:EmailField.text,密码:PasswordField.text){println(“我在这里做了吗?”)}中的{(成功:[NSDictionary]),{}语法为object.method(value1,param2:value2,param3:value3,param4:value4,param5:value5).这不是你要写的。读一下Swift的书。你似乎还没有学会语言,只是在抄袭例子;这是行不通的。再次,阅读并理解这本书。