带选项参数的函数,或使用空字典作为默认参数

时间:2014-11-06 14:56:45

标签: dictionary swift optional-parameters

这就是我想要的:

swift中的一个函数可以接受一个可选参数,因此以下对函数myFunc的调用都可以正常工作:

// assume we have a Dictionary like this
let dict=["key":"value"]

myFunc()
myFunc(dict)

函数myFunc的工作原理如下:

传入myFunc的任何词典都与myFunc内的词典合并。如果没有字典传递到myFunc,则myFunc内的字典将按原样使用。


这就是我想在Swift中实现的目标。这就是我一直在做的事情:

似乎你不能完全省略参数,但经过一些阅读后我一直在研究默认参数。我希望参数是Dictionary类型,但如果没有指定参数,那么我什么也不想要,或者至少是空字典。我已经声明了一个空字典,如下所示:

let emptyDict = Dictionary<String,String>()

然后我用一个默认参数声明我的函数,如:

func myFunc(paramDict:Dictionary = emptyDict){ ... }

这给了我以下错误:

Reference to generic type 'Dictionary' requires arguments in <...>

我在这里假设它抱怨,因为我使用空字典作为参数。

有人能告诉我如何在Swift中构建一个函数,它可以像{I} myFunc一样运行吗?

1 个答案:

答案 0 :(得分:5)

您必须在函数参数中指定泛型类型:

func myFunc(paramDict:Dictionary<String, String> = emptyDict) { }
                                ^^^^^^^^^^^^^^^^

请注意,您不需要定义变量来指定默认值 - 只需这样:

func myFunc(paramDict:Dictionary<String, String> = [:]) { }

此外,如果您的函数体具有类似&#34的逻辑,您可能需要考虑使用可选项;如果提供了dict,请执行此操作,否则执行此操作&#34;:

func myFunc(paramDict:Dictionary<String, String>? = nil) { }

它的表现力更强,我认为代码更具可读性。