Ios 在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

我试图在我的swift应用程序中实现CometChat。我通过桥接头成功导入了Objective-c框架。但现在我一直在尝试从swift调用Objective-C方法

这是我要调用的接口中的方法:

- (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的书。你似乎还没有学会语言,只是在抄袭例子;这是行不通的。再次,阅读并理解这本书。