【问题标题】:Functions with Option Parameters, or using an empty Dictionary as a Default Parameter带有选项参数的函数,或使用空字典作为默认参数
【发布时间】:2014-11-06 14:56:44
【问题描述】:

这就是我想要的:

一个可以接受可选参数的 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...) 或 func myFunc(paramDict: Dictionaray? = nil)(对不起,我没有我的 mac)

标签: dictionary swift optional-parameters


【解决方案1】:

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

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

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

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

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

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

在我看来,它更具表现力,代码更具可读性。

【讨论】:

  • 是的,我也更喜欢使用 Optionals(伟大的语言功能恕我直言),我会沿着这条路走。非常感谢!
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2021-02-03
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多