我正在创建一个应用程序,我必须放置很多if/else
语句。我知道你可以用其他编码语言的标题来做,但我不确定你是否可以在Swift中做到。
你如何缩短这一点:
if x == y || x == z {
//do something
}
对于这样的事情:
if x == y || z {
//do something
}
答案 0 :(得分:8)
也许您可以考虑使用数组并检查数组中是否有x
,如下例所示:
let (x, y, z) = (3, 8, 3)
if [y, z].contains(x) {
//True
}
如果您要比较对象(例如UIImage
),请使用containsObject
代替contains
:
if [x, y, z].containsObject(y) {
//True
}
答案 1 :(得分:3)
我认为没有合理的语言(包括swift),在逻辑或==
之间分发比较||
。
你写作的方式 - x == y || x == z
- 是最紧凑的形式。
答案 2 :(得分:3)
Jack Greenhill's answer确实朝着正确的方向前进。然而,随着越来越多的值,他的方法将变得非常低效,因为它必须检查数组的每个元素是否相等,因此复杂性O(n)
。
应该使用一个非常被低估的数据结构,它可以在O(1)
中执行此类操作:Set。它使用哈希值快速检查值是否存在。您可以像这样使用它:
let x = 3
let values : Set = [1, 3, 6, 1, 7] // {6, 7, 3, 1}
if values.contains(x) {
// ...
}
这需要相同的时间,无论values
是否只包含一个或1000个元素。数组的速度会慢1000倍。
通常在决定使用数组之前决定使用数组。如果你的元素没有任何顺序,并且只能出现一次(实际情况通常比你想象的要多),你可能想要一个集合。通过将元素放入其中,集合可以免费为您提供有用的方法,例如union
,isSubset
,interception
等。元素类型的唯一额外要求是符合Hashable
。
答案 3 :(得分:0)
也许这就是:
switch x {
case y, z : // do then
default : // do else
}