美文网首页
Swift 'for - in' 循环的各种姿势

Swift 'for - in' 循环的各种姿势

作者: _Choice_ | 来源:发表于2017-08-31 14:25 被阅读427次

    前言

    Swift取消了OC中的C形式的for循环。只用一种单一的for - in形式来取代。
    本文将为大家介绍几种for - in的姿势。

    常规用法

    常规用法与OC中的'for - in'用法一致,如:

    let testArr = [9,7,3,8,5,2,1,0,6]
    for num in testArr {
        print(num)
    }
    

    过去在OC中我们想获取遍历的元素的索引都要通过i来获得,现在可以通过enumerate来获取

    for num in testArr.enumerated() {
        print(num.element,num.offset)
    }
    

    通过enumerate可以方便的获得元素的下标和内容。官方注释中也提到了另外一种写法,使用元祖来方便获取元素索引。

    for (n, c) in "Swift".characters.enumerated() {
               print("\(n): '\(c)'")
           }
        ///     // Prints "0: 'S'"
        ///     // Prints "1: 'w'"
        ///     // Prints "2: 'i'"
        ///     // Prints "3: 'f'"
        ///     // Prints "4: 't'"
    

    同时,swift也提供了reverse()方法,用法与enumerate一致,可以反向遍历数组中的元素。

    区间循环

    • ...表示闭区间,如:0...10,表示0至10并且包含10
    • ..<表示开区间,如:0..<10 表示0至9,不包含10
    for i in 0..<10 {
        print(i)
    }
    //0 1 2 3 4 5 6 7 8 9
    
    for i in 0...10 {
        print(i)
    }
    //0 1 2 3 4 5 6 7 8 9 10
    

    stride语法

    stride语法提供了更大的灵活性,满足不同的递增条件以和开闭区间的结合。

    func stride<T>(from start: T, to end: T, by stride: T.Stride)
    func stride<T>(from start: T, through end: T, by stride: T.Stride)
    //from:开始位置 by:递增步长
    //to:结束位置,开区间,不包含
    //through:结束位置,闭区间,包含
    

    如:

    for i in stride(from: 0, to: 10, by: 2) {
        print(i)
    }
    //0 2 4 6 8
    
    for i in stride(from: 0, through: 10, by: 2) {
        print(i)
    }
    //0 2 4 6 8 10
    

    如果我们想让i递减,可以将步长也就是by设置成负值,实现递减遍历。

    总结

    swfit中 'for - in'循环的几种用法十分方便,通过搭配能够为日常的编码带来带来效率的提升。

    相关文章

      网友评论

          本文标题:Swift 'for - in' 循环的各种姿势

          本文链接:https://www.haomeiwen.com/subject/lydqjxtx.html