假设你有密码
if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" {
// do something
}
有没有办法缩短或美化这个条件(最好不使用switch语句)?我知道这段代码不起作用:
if stringValue == ("ab" || "bc" || "cd") {
// do something
}
我在其他语言上看到过一些复杂的解决方案,但它们似乎是语言特定的,不适用于Swift。任何解决方案都将受到欢迎。
8条答案
按热度按时间ux6nzvsh1#
e0bqpujr2#
你可以创建一个这样的扩展:
然后像这样使用它:
感谢impl让我不用打字:https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/
ssm49v7z3#
我不知道。你可以这样做:
kb5ga3dv4#
使用Switch语句。
tag5nh1u5#
结构
["some", "array"].contains("value")
可以工作,但有点烦人:1.它颠倒了您可能想要写入的从左到右的顺序。
1.数组中的元素没有使用Swift的类型推断来声明,这通常会迫使你包含不必要的信息来取悦编译器。
您可以使用
Set(["value"]).isSubset(of: ["some", "array"])
。在使用枚举时,这种好处尤其明显:
iaqfqrcu6#
上面的函数返回bool值,然后相应地编写逻辑。
scyqe7ek7#
只是为了好玩,如何在
String
上重载函数:这给你带来了全面的性能优势,因为编译器将能够尽可能多地内联和尾调用,代价是必须在代码中编写尽可能多的重载,并且也不能传递数组-但其他答案也处理这个问题。
kkih6yb88#