是否可以将此条件缩写为 Swift?
Is it possible to abbreviate this condition in Swift?
有没有办法在 Swift 中缩写以下类型的条件?
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 )
但其中 none 有效。我也尝试查看文档,但找不到类似的示例。
谢谢!
我不认为有一种方法可以像你想要的那样缩写它,但也许有另一种方法来处理同样的事情...
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.
}
对于这种情况,我喜欢使用 John Sundell 对 equatable 的扩展:
extension Equatable {
func isAny(of candidates: Self...) -> Bool {
return candidates.contains(self)
}
}
然后您可以将其用作:
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }
有没有办法在 Swift 中缩写以下类型的条件?
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 )
但其中 none 有效。我也尝试查看文档,但找不到类似的示例。
谢谢!
我不认为有一种方法可以像你想要的那样缩写它,但也许有另一种方法来处理同样的事情...
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.
}
对于这种情况,我喜欢使用 John Sundell 对 equatable 的扩展:
extension Equatable {
func isAny(of candidates: Self...) -> Bool {
return candidates.contains(self)
}
}
然后您可以将其用作:
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }