Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含Objective-C类中不可用参数的Swift函数_Objective C_Swift - Fatal编程技术网

包含Objective-C类中不可用参数的Swift函数

包含Objective-C类中不可用参数的Swift函数,objective-c,swift,Objective C,Swift,更新:此问题与上述问题不重复。 已验证(见下面的注释)方法定义是正确的 已正确添加到项目Swift.h文件中。这个问题涉及到 为什么无参数方法适用于Obj-C和 但事实并非如此 我有一个swift类,打算被Objective-C类引用。Swift类包含一个函数,用于发送网络消息并返回包含搜索结果的词典。我遇到了奇怪的行为,如果我的函数包含参数,那么它在实现Objective-C类中不可用。但是,如果删除所有参数,则该函数将可用 在我的Swift类中,如果我按如下方式声明该方法,它在Obj-C类中

更新:此问题与上述问题不重复。 已验证(见下面的注释)方法定义是正确的 已正确添加到项目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)zoomzoom: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)zoomzoom: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如果有任何参数会导致其不可用