有没有一种方法来简化在斯威夫特以下类型的条件?
if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .8) && startButton.isSelected )
我想打字:
if ( (myEnum == .1 || .2 || .3 || .8) && startButton.isSelected )
和:
if ( (myEnum == .1,.2,.3,.8) && startButton.isSelected )
但这些都不奏效。 我也试过在看文档,但无法找到一个类似的例子。
谢谢!
我不认为有一种方法来简化它像你想,但有,也许,另一种方式来处理同样的事情...
extension YourEnum {
var someCondition: Bool {
switch self {
case .1, .2, .3, .8:
return true
default:
return false
}
}
}
通过在调用点变成这样你的条件...
if myEnum.someCondition, startButton.isSelected {
doTheThing()
}
通过使用这种方法你的代码变得更加易读了。 现在你可以给你的病情哪些其他开发者(包括你的未来的自己)就能理解一个合理的名称。 凡在我不知道为什么这些案件选择。
它还允许您使用在多个地方这种情况,并只有一个实现它。 所以,如果需要改变,你可以在一个地方进行更改。
if [.a, .b, .c, .d].contains(myEnum) && startButton.isSelected {
// etc.
}
对于这种情况,我喜欢用约翰Sundell的扩展equatable:
extension Equatable {
func isAny(of candidates: Self...) -> Bool {
return candidates.contains(self)
}
}
然后,您可以使用它作为:
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }