2017-08-13 52 views
0

我有几个的称取枚举的阵列作为参数的方法的一个参数,但是我看到,例如改变的时间间隔为组件的情况下,我请接受多个枚举与迅速

func components(_ unitFlags: NSCalendar.Unit, from startingDate: Date, to resultDate: Date, options opts: NSCalendar.Options = []) -> DateComponents 

其中unitFlags接受多个值。例如,即使函数参数未定义为NSCalendar单位数组,我也可以传递[.year, .month]。我如何在自定义枚举/函数中实现这种行为?

由于

+1

'NSCalendar.Unit'是[OptionSet](https://developer.apple.com/documentation/swift/optionset),不是枚举,而是混合了Swift 2和3语法。在Swift 3中,它是'Calendar.Component',整个方法是'func dateComponents(_ components:Set ,从start:Date到end:Date) - > DateComponents' – vadian

+0

感谢vadian,我将不得不采取看看OptionSet,我从来没有听说过这样的事情。 (我的例子是Swift 4) –

+1

Swift 3和4中的方法签名是相同的,我说的是本机'Calendar'结构而不是'NSCalendar'。不要在Swift 3+中使用'NSCalendar'。 – vadian

回答

2

例如,我可以通过[.year, .month]

即不枚举的阵列。这是一个Option Set。实际上,这里所期望的是一组结构静态属性。

这是一个很好的语法,但它可能不适合你的用例,因为你真的可能想要一个枚举数组。选项集是构建和操作位掩码的一种方式,这不是你所拥有的。