有没有办法在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 )
但这些都没有奏效。我也试过看文档,但找不到类似的例子。
谢谢!
答案 0 :(得分:8)
我认为没有办法像你想要的那样缩写它,但也许还有另一种方法来接近同样的事情......
import subprocess
commands = '''
bashcmd1
bashcmd2
bashcmd3
'''
process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = process.communicate(commands)
print out
通过这样做,您在呼叫站点的条件变为......
extension YourEnum {
var someCondition: Bool {
switch self {
case .1, .2, .3, .8:
return true
default:
return false
}
}
}
通过使用这种方法,您的代码也变得更具可读性。您现在可以为您的条件提供一个合理的名称,其他开发人员(包括您未来的自己)将能够理解。以前我不知道为什么选择这些案件。
它还允许您在多个位置使用此条件,并且只有一个实现。因此,如果需求发生变化,您可以在一个地方进行更改。
答案 1 :(得分:5)
if [.a, .b, .c, .d].contains(myEnum) && startButton.isSelected {
// etc.
}
答案 2 :(得分:3)
对于这种情况,我喜欢使用John Sundell的扩展等同于:
extension Equatable {
func isAny(of candidates: Self...) -> Bool {
return candidates.contains(self)
}
}
然后您可以将其用作:
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }