【发布时间】:2016-03-18 08:48:49
【问题描述】:
我创建了SnapOperationQueue,这是一个带有一些我喜欢的扩展的操作队列。其中之一是重新划分操作组的优先级。添加具有以下四个优先级之一的操作 (SnapOperationQueuePriority):
case Highest
case High
case Normal
case Low
在当前的实现中,我拥有它,因此 .Low 和 .Highest 不会改变,但 .High 和 .Normal 会改变。
我想更改此设置,以便我可以设置优先级的上限和下限。即,我可以说我们现在最好执行的此操作(.Low)可能会变得非常重要(.High),即当预缓存图像并且屏幕上突然需要该图像时。这些阈值也应该能够说明某些操作,即使是在重新划分优先级的组中,也不会被重新划分为低于某项的优先级,即登录操作(.Highest)应该保持为.Highest
为此,我想像这样修改我的枚举:
case Highest(lowerThreshold: SnapOperationQueuePriority = .Highest)
case High(lowerThreshold: SnapOperationQueuePriority = .Low, higherThreshold: SnapOperationQueuePriority = .High)
case Normal(lowerThreshold: SnapOperationQueuePriority = .Low, higherThreshold: SnapOperationQueuePriority = .High)
case Low(higherThreshold: SnapOperationQueuePriority = .Low)
但是,我得到“不允许在 touple 类型中使用默认参数”。我希望在此处使用默认参数的原因是,此更改不会破坏或更改已使用现有实现的任何代码的行为。
您能否建议一种方法,让我可以在不更改依赖于当前 API 的代码的 API 的情况下获得新的优先级?
【问题讨论】:
-
您不能在枚举中为关联值枚举提供默认值。您必须为每个用例定义一个或多个新枚举案例并使用它们。这不会影响您现有的代码。但就其他新病例而言,无论如何您都必须这样做
标签: swift enums default-arguments