这就是我想要的:
swift 中的一个函数可以接受可选参数,因此以下对函数 myFunc
的调用都可以正常工作:
// assume we have a Dictionary like this
let dict=["key":"value"]
myFunc()
myFunc(dict)
myFunc
函数的工作原理如下:
任何传入 myFunc
的字典都会与 myFunc
中的字典合并。如果没有字典传递到 myFunc
中,那么 myFunc
中的字典将按原样使用。
这就是我想在 Swift 中实现的目标。这就是我一直在做的事情:
似乎你不能完全省略参数,但在阅读了一些相关资料后,我一直在研究默认参数。我希望参数是字典类型,但如果没有指定参数,那么我什么都不想要,或者至少是一个空字典。我已经像这样声明了一个空字典:
let emptyDict = Dictionary<String,String>()
然后我用默认参数声明我的函数,如下所示:
func myFunc(paramDict:Dictionary = emptyDict){ ... }
这给了我以下错误:
Reference to generic type 'Dictionary' requires arguments in <...>
我在这里假设它在提示,因为我使用一个空字典作为参数。
任何人都可以告诉我如何在 Swift 中构建一个可以像我想要的那样运行的函数 myFunc
吗?
最佳答案
您必须在函数参数中指定泛型类型:
func myFunc(paramDict:Dictionary<String, String> = emptyDict) { }
^^^^^^^^^^^^^^^^
请注意,您不需要定义变量来指定默认值 - 只需这样做:
func myFunc(paramDict:Dictionary<String, String> = [:]) { }
此外,如果您的函数主体具有类似“如果提供字典则执行此操作,否则执行此操作”这样的逻辑,您可能需要考虑使用可选项:
func myFunc(paramDict:Dictionary<String, String>? = nil) { }
在我看来,它更具表现力,代码也更具可读性。
关于dictionary - 带有选项参数或使用空字典作为默认参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782465/