swift学习素材

[Swift]语法基础:swift中的for循环

2016-08-02  本文已影响4037人  流火绯瞳

关于for循环,这里不做过多解释,大家都很熟悉,其在C语言中的使用格式是这样的:

for(int i = 0 ; i < 10; i++){  
      
    // 你需要做的操作  
}  

这也就是标准的C-Type格式的for循环;
另外,在OC中还有另外一个遍历集合的for-in循环,其格式是这样的:

for (NSString *string in array) {  
          
        NSLog(@"%@",string);  
    }  

那么,在swift中的for循环又是怎样的呢?
在Swift中for循环变得更加强大灵活,写法上也有以上两种方式:

for var i = 0; i < 10; i += 1 {  
      
}  
  
for i in 0..<10 {  
      
}  

只不过,in关键字后不但可以接一个集合类型,还可以跟一个区间类型;

  • ..< 是不包含10的,

但是,在最新的swift 3.0中,使用C-Type格式for循环时,Xcode会有警告:

提示我们改为for-in循环,这在大多数情况下是能满足需求的;
但是,for-in循环每次增加的步长是1,如果我们想每次循环加2怎么办呢?
这就用到了下面这个函数:

// swift 2.0
stride(to: <Int>, by: <Distance>)  

//调用者: 就是索引的开始数字,例如:0;
//参数to: 就是最大数值,不包含此数值,例如:10;
//参数by: 就是步长,每次改变的大小

// 在swift 3.0 中,此方法改为
stride(from: <T>, to: <T>, by: <T.Stride>)
// from: 起始数
// to: 最大数,不包含此数值
// by: 步长,每次改变的大小

这样,我们就可以写一个从0到10,每次增加2的for循环:

//swif 2.0
for i in 0.stride(to: 10, by: 2) {  
      
    //  
    print(i)  
}  

// swift 3.0
for i in stride(from: 0, to: 10 ,by: 2) {
    
    print(i)
}

控制台的输入是一样的:

0  
2  
4  
6  
8  

这里的变量是包含0,不包含10,也就是前闭后开的集合;如果想包含后面的值,就需要修改一下stride函数的参数:

// swift 2.0
stride(through: <Int>, by: <Int>) 
//swif 3.0
stride(from: T, through: T, by: T.Stride)

即:

// swift 2.0
for i in 0.stride(through: 10, by: 2) {  
      
    print(i)  
}  
// swift 3.0
for i in stride(from: 0, through: 10, by: 2) {
    
    print(i)
}

控制台的输出,就包含了10:

0  
2  
4  
6  
8  
10 

以上,都是从小到大递增的,能不能递减呢?
答案是可以的,只需要用最大的数值去调用stride方法,传入一个较小的结束参数,步长改为负数即可,例如:

// swift 2.0
for i in 10.stride(through: 0, by: -2) {  
      
    print(i)  
}  

// swift 3.0
for i in stride(from: 10, through: 0, by: -2) {
    
    print(i)
}

控制台输出:

10  
8  
6  
4  
2  
0  

对于步长是1的区间,递减运算还可以这样做:

// 正常顺序
for i in 1..<10 {
    
    print(i)
}
// 递减输出
for i in (1..<10).reversed() {
    
    print(i)
}

(完)

上一篇 下一篇

猜你喜欢

热点阅读