简述:OC的数组遍历和传统的C语言很像,用下标
i
遍历就可以(或者forin),而Swift中遍历的方式和OC就稍有不同,今天在这里简单说说OC和Swift遍历数组的姿势,本文讲的应该不是很全面,欢迎评论中补充!
OC中的数组遍历
1. 下标遍历
下标遍历属于入门级别的吧,但却很重要;
- 使用场景1:代码中需要用到index(下标)
- 使用场景2:在遍历过程中需要增减成员
代码:
NSArray *arr = @[@"q", @"w", @"e", @"r", @"t", @"y"];
for (int i = 0; i < arr.count; i++) {
NSLog(@"%@", arr[i]);
}
2. for ... in 遍历
这个也属于入门级别的
- 使用场景:工程中只用到数组中的成员,不需要下标的情况下
代码:
NSArray *arr = @[@"q", @"w", @"e", @"r", @"t", @"y"];
for (NSString *str in arr) {
NSLog(@"%@", str);
}
3. 使用 enumerateObjectsUsingBlock:遍历
OC系统提供了遍历的方法,参数是一个block,懒人专用
参数解释
- obj:数组中的对象
- idx:数组中的下标
- *stop 控制是否继续进行本条遍历,相当于控制continue
代码:
NSArray *arr = @[@"q", @"w", @"e", @"r", @"t", @"y"];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// *stop = YES, 相当于for循环中的continue
if (idx == 0) {
*stop = YES;
}
// return,相当于for循环中的 break
if (idx == 4) {
return;
}
NSLog(@"arr[%ld] = %@", idx, obj);
}];
Swift中的数组遍历
1. 下标遍历
Swift中对应的下标遍历,和OC不一样;..<
相当于数学中的左闭右开区间
,也就是≤ i <
;...
则意味着全闭,以此类推。
在Swift中,是不支持C语言中for( ; ; ){};
这种遍历的,用以下方式代替
let arr: [String] = ["q", "w", "e", "r", "t", "y"]
for i in 0..<arr.count {
let item = arr[i]
print("\(item)")
}
2. 只要数组中的对象
在Swift中没有OC中的for...in
遍历,以下这种方式代替
let arr: [String] = ["q", "w", "e", "r", "t", "y"]
for item in arr {
print("\(item)")
}
3. 只要数组中的对象
在Swift中我没有找到OC中懒人专属
方法,不过依然有下标
和对象
同时遍历的方法,开如下代码吧:
let arr: [String] = ["q", "w", "e", "r", "t", "y"]
for (i, item) in arr.enumerated() {
print("arr[\(i)] = \(item)")
}
4. OC和Swift数组的反序遍历
如果是OC
, 想要i
从9
遍历到0
, 可以用while
, 也可以用for
, 举个例子:
for (int i = 9; i >= 0; i--) {
NSLog(@"%dd", i);
}
如果是Swift
, 就要简单得多, Swift
中的for
循环需要提供一个区间
, 我们可以对这个区间
进行操作, 比如说 :
for i in (0..<10).reversed() {
print(i)
}
// 这里的打印结果将是 9 8 7 6 5 4 3 2 1 0