在程序開發當中,for循環使用的頻率無疑是最高的。經常使用的swift循環是遞增式遍歷。固然各類循環,swift都能辦到。但其大多采用關鍵字形式實現,大部分開發者更喜歡直接使用C式循環代碼。在swift3.0後,C語言形式被完全廢棄,所以從低版本升上來的代碼若是是swift風格寫法,按照提示基本能夠直接fix。但若是不少循環實現都是基於C語言形式,那不得不討論一下如何拯救這個可怕的習慣了。swift的循環語言特性跟python最爲接近(ps:我學的語言當中最接近)。因此,大多數python循環能處理的狀況,swift都能辦到且更爲優雅。python
1:如何遍歷一個字典或者數組?swift
首先要提的是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 我真的須要遞減! ui
這也許是swift的一個大坑了,固然解決方式很容易。只須要一個關鍵字便可實現,swift3.0以後稍有變化。對要遍歷的區間調用reverse()方法,便可實現for循環的反向遍歷,代碼以下spa
for i in (0...10).reverse(){ print(i)
// 打印結果爲10-0 }
4:這就結束了嗎對象
固然不是啦,從語言特性上來上說,python對數組和循環的處理是最使人以爲溫馨的。而在循環的處理上,幾乎涵蓋了python的全部特性,且大多也是以函數調用的方式來處理的。下面就要介紹一下平時可能會用到的一些方法。blog
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之間的偶數 }
如上,除了單獨調用方法對循環進行處理以外,swift還支持在循環中嵌套調用各類方法,這使得對數據的處理更爲方便快捷,因此,也許完全放棄C式循環,何嘗不是一個好選擇