包含Objective-C类中不可用参数的Swift函数
更新:此问题与上述问题不重复。 已验证(见下面的注释)方法定义是正确的 已正确添加到项目Swift.h文件中。这个问题涉及到 为什么无参数方法适用于Obj-C和 但事实并非如此 我有一个swift类,打算被Objective-C类引用。Swift类包含一个函数,用于发送网络消息并返回包含搜索结果的词典。我遇到了奇怪的行为,如果我的函数包含参数,那么它在实现Objective-C类中不可用。但是,如果删除所有参数,则该函数将可用 在我的Swift类中,如果我按如下方式声明该方法,它在Obj-C类中不可用,并且不会编译:包含Objective-C类中不可用参数的Swift函数,objective-c,swift,Objective C,Swift,更新:此问题与上述问题不重复。 已验证(见下面的注释)方法定义是正确的 已正确添加到项目Swift.h文件中。这个问题涉及到 为什么无参数方法适用于Obj-C和 但事实并非如此 我有一个swift类,打算被Objective-C类引用。Swift类包含一个函数,用于发送网络消息并返回包含搜索结果的词典。我遇到了奇怪的行为,如果我的函数包含参数,那么它在实现Objective-C类中不可用。但是,如果删除所有参数,则该函数将可用 在我的Swift类中,如果我按如下方式声明该方法,它在Obj-C类中
func getSearchResults(searchText:String?, searchType:String?, zoom:Int?) -> NSDictionary
但是,删除此类参数后,Obj-c可以使用该功能,并且一切正常:
func getSearchResults() -> NSDictionary
为什么Obj-C类可以使用没有参数的函数,而包含参数的函数则不可用?有人见过这种行为吗?谢谢 卢·弗兰科的解释是正确的。您的函数有一个
Int?
参数,并且没有与Objective-C中的参数等效的参数。因此,整个函数不能暴露于Objective-C。请使用Int
,或者,如果它确实可以是nil
,请使用NSNumber?
,Lou Franco的解释是正确的。您的函数有一个Int?
参数,并且没有与Objective-C中的参数等效的参数。因此,整个函数不能暴露于Objective-C。请使用Int
,或者,如果它真的可以是nil
,请使用NSNumber?
参数列表中的坏小子就是Int?
参数Int
在Objective-C中表示为NSInteger
。因此它们没有指针,也不能有null
值。考虑删除可选的限定符,或者将其更改为<代码> NSCODE?< /代码>,
例如:
func-getSearchResults(searchText:String?,searchType:String?,zoom:Int)->NSDictionary
参数列表中的坏小子是Int?
参数Int
在Objective-C中表示为NSInteger
。因此它们没有指针,也不能有null
值。考虑删除可选的限定符,或者将其更改为<代码> NSCODE?< /代码>,
例如:
func-getSearchResults(searchText:String?,searchType:String?,zoom:Int)->NSDictionary
1。不带Int试试?参数——也许它不能转换。2.检查您的项目Swift.h文件(生成的标题——用项目名称替换项目)——查看getSearchResults是否存在以及它的声明方式——可能这不是您所期望的。我检查了项目Swift.h文件,并且正确声明了方法:-(NSDictionary*\u Nonnull)getSearchResults:(id\u Nonnull)searchText searchType:(id\u非空)searchType缩放:(NSInteger)缩放@菲普斯特:我已经仔细检查过了<代码>-(NSDictionary*\u Nonnull)getSearchResults:(NSString*\u Nullable)searchText searchType:(NSString*\u Nullable)searchType zoom:(NSInteger)zoom只有将最后一个参数设置为非可选的zoom:Int
(或删除该参数)时,才会在Project Swift.h中声明code>。1。不带Int试试?参数——也许它不能转换。2.检查您的项目Swift.h文件(生成的标题——用项目名称替换项目)——查看getSearchResults是否存在以及它的声明方式——可能这不是您所期望的。我检查了项目Swift.h文件,并且正确声明了方法:-(NSDictionary*\u Nonnull)getSearchResults:(id\u Nonnull)searchText searchType:(id\u非空)searchType缩放:(NSInteger)缩放@菲普斯特:我已经仔细检查过了<代码>-(NSDictionary*\u Nonnull)getSearchResults:(NSString*\u Nullable)searchText searchType:(NSString*\u Nullable)searchType zoom:(NSInteger)zoom只有将最后一个参数设置为非可选的zoom:Int
(或删除该参数)时,才会在Project Swift.h中声明code>。我建议也使用String
或NSString?
,而不是String?
,因为Swift 3对这类事情将更加严格。我建议使用String
或NSString?
而不是String?
,因为Swift 3对这类事情将更加严格。这是有意义的,但是,即使这样也不会编译:func getSearchResults(searchText:NSString)->NSDictionarySeems如果有任何参数会导致其不可用,这是有道理的,但是,即使这样也不会编译:func getSearchResults(searchText:NSString)->NSDictionarySeems如果有任何参数会导致其不可用