一般來說,swift循環是遞增式遍歷。當然各種循環,swift都能辦到。但其大多采用關鍵字形式實現,大部分開發者更喜歡直接使用C式循環代碼。在swift3.0后,C語言形式被徹底廢棄,因此從低版本升上來的代碼如果是swift風格寫法,按照提示基本可以直接fix。但如果很多循環實現都是基於C語言形式,那不得不討論一下如何拯救這個可怕的習慣了。swift的循環語言特性跟python最為接近。所以,大多數python循環能處理的情況,swift都能辦到。
1:如何遍歷一個字典或者數組?
首先要提的是swift的for..in..語法,這個語法在python當中被稱之為迭代。用於數組,字典之類的數據內容遍歷。從作用上分析,是直接將數組元素賦值給變量,並取出,無需通過數組下標來取值。而針對於字典,除了取出key值,我們還可以同時取出關鍵字。具體代碼如下
|
let list = [1,3,5,7,"string test"] for i in list{ print(i) } let dict = ["name":"key name","name1":"key1 name","name2":"key 2 name"] for key in dict{ print(key) } } |
2:也許,我僅僅是需要一個計數器?
更多時候,循環變量被用於約束循環的次數或者做為int類型進行引用,值得一提的是,swift支持直接區間遍歷。在3.0版本之前,python的區間語法range關鍵詞適用。在3.0以后。swift不推薦使用。並且基於自身語言特性,在使用時,需要額外加關鍵字。那么,我們如何用swift帶來的語法糖寫出漂亮的for循環呢 代碼如下:
|
for i in 1..<10{ print(i) // 打印結果為1-9 } for i in 1...10{ print(i) //打印結果為1-10 }
for i in Range(start: 1,end: 10){ print(i) // 打印結果為1-9 不推薦使用 } |
3:help 我真的需要遞減!
這也許是swift的一個大坑了,當然解決方式很容易。只需要一個關鍵字即可實現,swift3.0之后稍有變化。對要遍歷的區間調用reverse()方法,即可實現for循環的反向遍歷,代碼如下
|
for i in (0...10).reverse(){ print(i)<br> // 打印結果為10-0 } |
4:這就結束了嗎
當然不是啦,從語言特性上來上說,python對數組和循環的處理是最令人覺得舒適的。而在循環的處理上,幾乎涵蓋了python的所有特性,且大多也是以函數調用的方式來處理的。下面就要介紹一下平時可能會用到的一些方法。
4.1.enumerate
如詞,這是為遍歷對象調用一個枚舉方法,在對數組等結構進行遍歷時,我們偶爾需要知道每次遍歷的索引,那么就需要用到enumerate了,其返回對象是一個元組,形式為(x,y),x代表遍歷的索引值,y代表遍歷的元素。代碼如下:
|
for (index, i) in (1...10).enumerate(){ print(index)// 遍歷索引 print(i) // 遍歷元素
} |
4.2 filter
也許,你想要在循環就過濾掉一系列毫無意義的數據?,swift提供在循環時直接過濾的方法,代碼如下:
|
for i in (1...10).filter({ i in i % 2 == 0}) { print(i) //輸出結果為1-10之間的偶數 } ///////////補充一個漂亮的語法糖/////////// for i in (1...10).filter({ $0 % 2 == 0}) {//swift閉包可以省略參數且用$0匿名,第二個參數則用$1,以此類推 print(i) //輸出結果為1-10之間的偶數 } |