Swift學習筆記——字符串的遍歷及擴展

今天群里有人問到了Swift中for…in遍歷字符串的問題,Interesting and learn about it.

我們知道,在Swift中,for……in的功能非常強大,那么該如何使用呢?

基本使用

首先我們寫出如下代碼:

let str = "1231312"
for i in str {
     print(i)
}

系統提示了一個錯誤:

Type 'String' does not conform to protocol 'SequenceType'


我們可以看到,這個錯誤提示我們'String'沒有遵守'SequenceType'的協議。
那么'SequenceType'協議是什么呢?從官方文檔中我們可以看到Array和Dictionary都是遵守這個協議的,那么我們先看看Array和Dictionary的實現。

let a: Array = [1,2,3,4]
for i in a {
    print(i)
}

let dic: [String: AnyObject] = ["a": 0, "b": 1, "c": 2]
for i in dic {
    print(i)
}

運行結果如下:
1 2 3 4 ("b", 1) ("a", 0) ("c", 2)
我們發現String的characters的屬性是遵守這個協議的,所以:

let str: String = "Swift"
for i in str.characters {
    print(i)
}

運行結果如下:
S w i f t

拓展使用

在查看官方文檔是,我們發現了這樣一段代碼:

enumerate()
Default Implementation
Returns a lazy SequenceType containing pairs (n, x), where ns are consecutive Ints starting at zero, and xs are the elements of base:

Declaration
@warn_unused_result func enumerate() -> EnumerateSequence<Self>

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

這是什么意思呢?我們來跑一下代碼:

for (n, c) in str.characters.enumerate() {
    print("\(n): '\(c)'")
}
        
for (n, c) in a.enumerate() {
    print("\(n): '\(c)'")
}
        
for (n, c) in dic.enumerate() {
    print("\(n): '\(c)'")
}

結果如下:
0: 'S' 1: 'w' 2: 'i' 3: 'f' 4: 't' 0: '1' 1: '2' 2: '3' 3: '4' 0: '("b", 1)' 1: '("a", 0)' 2: '("c", 2)'

可以看到,enumerate中記錄的是索引及其對應的值的字典。我們可以利用它拿到當前值及其索引。

Tip:

一般情況下,我們這樣遍歷一個字典:

for (k, v) in dic {
    print("\(k) —— \(v)")
}

運行結果如下:
b —— 1 a —— 0 c —— 2

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,880評論 1 10
  • 1、隨機數 不需要隨機數種子 arc4random()%N + begin:產生begin~begin+N的隨機數...
    我是小胡胡123閱讀 4,223評論 0 2
  • Swift2.0 1.defer譯為延緩、推遲之意類似棧 注意作用域,其次是調用順序——即一個作用域結束(注意),...
    zeqinjie閱讀 3,410評論 0 50
  • 最近時間感有點缺失,身體和心態都有些失衡。 想有用嗎?沒有?做到才是關鍵。
    Wind_Chow閱讀 273評論 0 0
  • 一覺醒來已是中午,好久沒睡這么久了。空間微博被高考刷屏,一眨眼,兩年了啊。 離我的高考已經兩年了。剛上大學時,偶爾...
    戲天閱讀 162評論 0 0