具有选项参数的函数,或使用空的Dictionary作为默认参数

Jim*_*ery 0 dictionary optional-parameters swift

这就是我要的:

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

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

myFunc()
myFunc(dict)
Run Code Online (Sandbox Code Playgroud)

功能 myFunc工作方式如下:

传入的任何词典myFunc都会与其中的词典合并myFunc。如果没有传递myFunc字典,则里面的字典myFunc将按原样使用。


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

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

let emptyDict = Dictionary<String,String>()
Run Code Online (Sandbox Code Playgroud)

然后使用默认参数声明函数,如下所示:

func myFunc(paramDict:Dictionary = emptyDict){ ... }
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

Reference to generic type 'Dictionary' requires arguments in <...>
Run Code Online (Sandbox Code Playgroud)

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

有人可以告诉我如何在Swift中构建一个功能,该功能可以实现我想要的功能myFunc吗?

Ant*_*nio 5

您必须在function参数中指定通用类型:

func myFunc(paramDict:Dictionary<String, String> = emptyDict) { }
                                ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

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

func myFunc(paramDict:Dictionary<String, String> = [:]) { }
Run Code Online (Sandbox Code Playgroud)

此外,如果函数的主体具有类似“如果提供了dict则执行此操作,否则执行该操作”之类的逻辑,您可能需要考虑使用可选方法:

func myFunc(paramDict:Dictionary<String, String>? = nil) { }
Run Code Online (Sandbox Code Playgroud)

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