For-In 循环多个条件
For-In Loops multiple conditions
随着 Xcode 7.3 的新更新,出现了很多与 Swift 3 的新版本相关的问题。其中一个说 "C-style for statement is deprecated and will be removed in a future version of Swift"(这出现在传统的 for
语句)。
其中一个循环有多个条件:
for i = 0; i < 5 && i < products.count; i += 1 {
}
我的问题是,是否有任何优雅的方法(不使用 break
)将此双重条件包含在 Swift:
的 for-in 循环中
for i in 0 ..< 5 {
}
如果你大声描述出来就和你说的一样:
for i in 0 ..< min(5, products.count) { ... }
也就是说,我怀疑你真的意思是:
for product in products.prefix(5) { ... }
这比任何需要下标的东西更不容易出错。
您可能实际上需要一个整数索引(尽管这种情况很少见),在这种情况下您的意思是:
for (index, product) in products.enumerate().prefix(5) { ... }
或者,如果您愿意,您甚至可以获得一个真正的索引:
for (index, product) in zip(products.indices, products).prefix(5) { ... }
另一种方法是这样
for i in 0 ..< 5 where i < products.count {
}
您可以将 &&
运算符与 where
条件一起使用,例如
let arr = [1,2,3,4,5,6,7,8,9]
for i in 1...arr.count where i < 5 {
print(i)
}
//output:- 1 2 3 4
for i in 1...100 where i > 40 && i < 50 && (i % 2 == 0) {
print(i)
}
//output:- 42 44 46 48
这是一个简单的解决方案:
var x = 0
while (x < foo.length && x < bar.length) {
// Loop body goes here
x += 1
}
再举一个例子。遍历子视图中的所有 UILabel:
for label in view.subviews where label is UILabel {
print(label.text)
}
随着 Xcode 7.3 的新更新,出现了很多与 Swift 3 的新版本相关的问题。其中一个说 "C-style for statement is deprecated and will be removed in a future version of Swift"(这出现在传统的 for
语句)。
其中一个循环有多个条件:
for i = 0; i < 5 && i < products.count; i += 1 {
}
我的问题是,是否有任何优雅的方法(不使用 break
)将此双重条件包含在 Swift:
for i in 0 ..< 5 {
}
如果你大声描述出来就和你说的一样:
for i in 0 ..< min(5, products.count) { ... }
也就是说,我怀疑你真的意思是:
for product in products.prefix(5) { ... }
这比任何需要下标的东西更不容易出错。
您可能实际上需要一个整数索引(尽管这种情况很少见),在这种情况下您的意思是:
for (index, product) in products.enumerate().prefix(5) { ... }
或者,如果您愿意,您甚至可以获得一个真正的索引:
for (index, product) in zip(products.indices, products).prefix(5) { ... }
另一种方法是这样
for i in 0 ..< 5 where i < products.count {
}
您可以将 &&
运算符与 where
条件一起使用,例如
let arr = [1,2,3,4,5,6,7,8,9]
for i in 1...arr.count where i < 5 {
print(i)
}
//output:- 1 2 3 4
for i in 1...100 where i > 40 && i < 50 && (i % 2 == 0) {
print(i)
}
//output:- 42 44 46 48
这是一个简单的解决方案:
var x = 0
while (x < foo.length && x < bar.length) {
// Loop body goes here
x += 1
}
再举一个例子。遍历子视图中的所有 UILabel:
for label in view.subviews where label is UILabel {
print(label.text)
}