Objective c 从Swift调用具有多个参数的目标C函数

Objective c 从Swift调用具有多个参数的目标C函数,objective-c,swift,Objective C,Swift,我试图从Swift调用具有多个参数的Objective C方法。我在这里遵循了出色的设置说明: My.h头文件: NSMutableData *_responseData; @interface RegistrationEmailSender : NSObject - (bool) sendRegistrationEmail; @end 我的函数/方法声明: - (bool)sendRegistrationEmail:( NSString *) un

我试图从Swift调用具有多个参数的Objective C方法。我在这里遵循了出色的设置说明:

My.h头文件:

NSMutableData *_responseData;
@interface RegistrationEmailSender : NSObject
- (bool) sendRegistrationEmail;
@end
我的函数/方法声明:

- (bool)sendRegistrationEmail:( NSString *) un 
                             :( NSString *) em
{
      // send email
}
最后是来自Swift类的呼叫:

// Send User a Validation Email
var sender: RegistrationEmailSender = RegistrationEmailSender()
sender.sendRegistrationEmail(un: username as NSString, em: email as NSString)
                                
我从XCODE收到此错误:

Extra argument 'un' in call

我读过很多书,似乎“额外参数”错误消息具有误导性,它经常与类型不匹配和其他类似原因有关,尽管我已经尽力确保类型匹配。我是Swift和Objective C的新手。

尝试相信错误消息告诉您的内容-删除参数名称:

sender.sendRegistrationEmail(username, email)

尝试相信错误消息告诉您的内容-删除参数名称:

sender.sendRegistrationEmail(username, email)

尝试相信错误消息告诉您的内容-删除参数名称:

sender.sendRegistrationEmail(username, email)

尝试相信错误消息告诉您的内容-删除参数名称:

sender.sendRegistrationEmail(username, email)

您的代码有许多问题

- (bool)sendRegistrationEmail:( NSString *) un 
                             :( NSString *) em
应该是

- (BOOL) sendRegistrationEmail: (NSString *) un
                            em: (NSString *) em
.h文件需要与.m文件完全相同的定义。您不能跳过这些参数

然后,当您从Swift调用它时,它应该如下所示:

sender.sendRegistrationEmail(username, em: email)

(您不需要强制转换为NSString,因为Swift会自动在String和NSString等类型之间来回转换。)

您的代码存在许多问题

- (bool)sendRegistrationEmail:( NSString *) un 
                             :( NSString *) em
应该是

- (BOOL) sendRegistrationEmail: (NSString *) un
                            em: (NSString *) em
.h文件需要与.m文件完全相同的定义。您不能跳过这些参数

然后,当您从Swift调用它时,它应该如下所示:

sender.sendRegistrationEmail(username, em: email)

(您不需要强制转换为NSString,因为Swift会自动在String和NSString等类型之间来回转换。)

您的代码存在许多问题

- (bool)sendRegistrationEmail:( NSString *) un 
                             :( NSString *) em
应该是

- (BOOL) sendRegistrationEmail: (NSString *) un
                            em: (NSString *) em
.h文件需要与.m文件完全相同的定义。您不能跳过这些参数

然后,当您从Swift调用它时,它应该如下所示:

sender.sendRegistrationEmail(username, em: email)

(您不需要强制转换为NSString,因为Swift会自动在String和NSString等类型之间来回转换。)

您的代码存在许多问题

- (bool)sendRegistrationEmail:( NSString *) un 
                             :( NSString *) em
应该是

- (BOOL) sendRegistrationEmail: (NSString *) un
                            em: (NSString *) em
.h文件需要与.m文件完全相同的定义。您不能跳过这些参数

然后,当您从Swift调用它时,它应该如下所示:

sender.sendRegistrationEmail(username, em: email)


(您不需要强制转换为NSString,因为Swift会自动在String和NSString等类型之间来回转换。)

这样的方法声明是非常不恰当的:
-(bool)sendRegistrationEmail:(NSString*)un:(NSString*)em
,不要这样做。曾经遵循“通话中的额外参数‘un’”这并没有误导。您不明白其中的哪一部分?我正在尝试传递两个字符串参数,username作为第一个参数,email作为第二个参数。如果编译器出于某种原因只假设一个参数,为什么不抱怨“em”?作为Swift和Obj C的新手,我只是想找到正确的语法。谢谢。这不是“只假设一个论点”。您已经声明了两个参数,我们需要传递两个参数。您没有用外部参数名声明它们,所以我们需要零个外部参数名。这似乎是一个很容易理解的想法。这样的方法声明是非常不恰当的:
-(bool)sendRegistrationEmail:(NSString*)un:(NSString*)em
,只是不要这样做。曾经遵循“通话中的额外参数‘un’”这并没有误导。您不明白其中的哪一部分?我正在尝试传递两个字符串参数,username作为第一个参数,email作为第二个参数。如果编译器出于某种原因只假设一个参数,为什么不抱怨“em”?作为Swift和Obj C的新手,我只是想找到正确的语法。谢谢。这不是“只假设一个论点”。您已经声明了两个参数,我们需要传递两个参数。您没有用外部参数名声明它们,所以我们需要零个外部参数名。这似乎是一个很容易理解的想法。这样的方法声明是非常不恰当的:
-(bool)sendRegistrationEmail:(NSString*)un:(NSString*)em
,只是不要这样做。曾经遵循“通话中的额外参数‘un’”这并没有误导。您不明白其中的哪一部分?我正在尝试传递两个字符串参数,username作为第一个参数,email作为第二个参数。如果编译器出于某种原因只假设一个参数,为什么不抱怨“em”?作为Swift和Obj C的新手,我只是想找到正确的语法。谢谢。这不是“只假设一个论点”。您已经声明了两个参数,我们需要传递两个参数。您没有用外部参数名声明它们,所以我们需要零个外部参数名。这似乎是一个很容易理解的想法。这样的方法声明是非常不恰当的:
-(bool)sendRegistrationEmail:(NSString*)un:(NSString*)em
,只是不要这样做。曾经遵循“通话中的额外参数‘un’”这并没有误导。您不明白其中的哪一部分?我正在尝试传递两个字符串参数,username作为第一个参数,email作为第二个参数。如果编译器出于某种原因只假设一个参数,为什么不抱怨“em”?作为Swift和Obj C的新手,我只是想找到正确的语法。谢谢。这不是“只假设一个论点”。您已经声明了两个参数,我们需要传递两个参数。您没有用外部参数名声明它们,所以我们需要零个外部参数名。这似乎很容易理解。
em
可能会stay@BenKane这不是他写Objective-C方法声明的方式。谢谢你的反馈。我还尝试了sender.sendRegistrationEmail(用户名,电子邮件),并作为生成错误接收“调用中的额外参数”。啊,是的,你是对的,我不知道我是什么thinking@mba12我试过了,效果很好。如果没有,则说明您的
用户名
电子邮件