是否可以在Swift中缩写此条件?
有没有办法在Swift中缩写以下类型的条件是否可以在Swift中缩写此条件?,swift,enums,conditional-statements,operator-keyword,Swift,Enums,Conditional Statements,Operator Keyword,有没有办法在Swift中缩写以下类型的条件 if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .8) && startButton.isSelected ) 我试着打字: if ( (myEnum == .1 || .2 || .3 || .8) && startButton.isSelected ) 以及: 但这些都不起作用。我也试着查看文档,但找不到类似的例子 谢谢 我不认为
if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .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()
}
通过使用这种方法,您的代码也变得更具可读性。您现在可以给您的条件起一个合理的名字,其他开发人员(包括您未来的自己)将能够理解。以前我不知道为什么会选择这些案例
它还允许您在多个位置使用此条件,并且只有一个实现。因此,如果需求发生变化,您可以在一个地方进行更改。对于这种情况,我喜欢使用John Sundell对equatable的扩展:
if [.a, .b, .c, .d].contains(myEnum) && startButton.isSelected {
// etc.
}
extension Equatable {
func isAny(of candidates: Self...) -> Bool {
return candidates.contains(self)
}
}
然后,您可以将其用作:
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }
啊,我甚至没有想过这样扭转它:)唯一的区别是它会初始化一个额外的数组?@TheTiger这是一个非常小的数组,在执行行后不会被保持,所以应该没什么关系。@Fogmeister甚至我也忽略了这种数组,我只是在确认实际的差异。相关:。还有:。记住接受那些对你有帮助的答案。你有很多问题的答案,你的评论是正确的,但他们是不被接受的。它会回馈那些帮助你的人(你也会因为接受他们而得到名声):我会这样做的。在这种情况下,我犹豫不决,因为虽然你的答案对我来说是最有帮助和最明智的,但其他人的回答是技术上正确的,这正是我最初寻找的答案。。。但我会和你一起去,因为这毕竟是我的决定。@BooberBunz绝对。我没有压力。我只是注意到你的很多问题还在等着:-)请随意接受任何你喜欢的答案。我想要一个更好的,然后也换成:-)
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }