oc 風格的迴圈
var sum = 0
for var i = 0; i < 10; i++
print(sum)
for-in,0..<10 表示從0到9
sum = 0
for i in
0..<10
print(sum)//範圍 0...10 表示從0到10
sum = 0
for i in
0...10
print(sum)
省略下標
_ 能夠匹配任意型別
_ 表示忽略對應位置的值
for _ in
0...10
在 swift 中絕大多數的情況下,推薦使用 string 型別
string 是乙個結構體,效能更高
string 目前具有了絕大多數 nsstring 的功能
string 支援直接遍歷
nsstring 是乙個 oc 物件,效能略差
swift 提供了 string 和 nsstring 之間的無縫轉換
字串演練
遍歷字串中的字元
for s in str.characters
字串長度// 返回以位元組為單位的字串長度,乙個中文佔 3 個位元組
let len1 = str.lengthofbytesusingencoding(nsutf8stringencoding)
// 返回實際字元的個數
let len2 = str.characters.count
// 返回 utf8 編碼長度
let len3 = str.utf8.count
字串拼接
直接在 「」 中使用 (變數名) 的方式可以快速拼接字串
let str1 = "hello"
let str2 = "world"
let i = 32
str = "\(i) 個 " + str1 + " " + str2
我和我的小夥伴再也不要考慮 stringwithformat 了 :d
可選項的拼接
如果變數是可選項,拼接的結果中會有 optional
為了應對強行解包存在的風險,蘋果提供了 ?? 操作符
?? 操作符用於檢測可選項是否為 nil
如果不是 nil,使用當前值
如果是 nil,使用後面的值替代
let str1 = "hello"
let str2 = "world"
let i: int? = 32
str = "\(i ?? 0) 個 " + str1 + " " + str2
格式化字串
在實際開發中,如果需要指定字串格式,可以使用 string(format:…) 的方式
let h = 8
let m = 23
let s = 9
let timestring = string(format: "%02d:%02d:%02d", arguments: [h, m, s])
let timestr = string(format: "%02d:%02d:%02d", h, m, s)
string & range 的結合
在 swift 中,string 和 range連用時,語法結構比較複雜
如果不習慣 swift 的語法,可以將字串轉換成 nsstring 再處理
let hellostring = "我們一起飛"
(hellostring as nsstring).substringwithrange(nsmakerange(2, 3))
//使用 range 的寫法
let startindex = hellostring.startindex.advancedby(0)
letend
index = hellostring.end
index.advancedby(-1)
hellostring.substringwithrange(startindex..index)
陣列
陣列使用 定義,這一點與 oc 相同
//: [int]
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
遍歷for
numin numbers
通過下標獲取指定項內容let num1 = numbers[0]
let num2 = numbers[1]
可變&不可變
let 定義不可變陣列
var 定義可變陣列
let array = ["zhangsan", "lisi"]
//: 不能向不可變陣列中追加內容
var array1 = ["zhangsan", "lisi"]
//: 向可變陣列中追加內容
陣列的型別
如果初始化時,所有內容型別一致,擇陣列中儲存的是該型別的內容
如果初始化時,所有內容型別不一致,擇陣列中儲存的是 nsobject
//: array1 僅允許追加 string 型別的值陣列的定義和例項化var array2 = ["zhangsan",18]
//: 在 swift 中,數字可以直接新增到集合,不需要再轉換成 `nsnumber`
(100)
//: 在 swift 中,如果將結構體物件新增到集合,仍然需要轉換成 `nsvalue`
使用 : 可以只定義陣列的型別
例項化之前不允許新增值
使用 型別 可以例項化乙個空的陣列
var array3: [string]陣列的合併//: 例項化之前不允許新增值
//: 例項化乙個空的陣列
array3 = [string]()
必須是相同型別的陣列才能夠合併
開發中,通常陣列中儲存的物件型別都是一樣的!
array3 += array1陣列的刪除//: 必須是相同型別的陣列才能夠合併,以下兩句**都是不允許的
//array3 += array2
//array2 += array3
//: 刪除指定位置的元素
array3.removeatindex(3)
//: 清空陣列
array3.removeall()
記憶體分配
如果向陣列中追加元素,超過了容量,會直接在現有容量基礎上 * 2
var
list = [int]()
for i in 0...16
字典
定義同樣使用 定義字典
let 不可變字典
var 可變字典
[string : nsobject] 是最常用的字典型別
//: [string : nsobject] 是最常用的字典型別
var dict = ["name": "zhangsan", "age": 18]
賦值
賦值直接使用 dict[key] = value 格式
如果 key 不存在,會設定新值
如果 key 存在,會覆蓋現有值
//: * 如果 key 不存在,會設定新值
dict["title"] = "boss"
//: * 如果 key 存在,會覆蓋現有值
dict["name"] = "lisi"
遍歷
k,v 可以隨便寫
前面的是 key
後面的是 value
//: 遍歷
for (k, v) in dict
合併字典
如果 key 不存在,會建立新值,否則會覆蓋現有值
//: 合併字典
var dict1 = [string: nsobject]()
dict1["nickname"] = "大老虎"
dict1["age"] = 100
//: 如果 key 不存在,會建立新值,否則會覆蓋現有值
for (k, v) in dict1
print(dict)
Swift3建立陣列
陣列是由一組型別相同的元素構成的有序資料集合。陣列中的集合元素是有 序的,而且可以重複出現。在swift語言中,陣列的型別格式為 array或 elementtype 其中array中的elementtype表示陣列的型別,是泛型寫法。elementtype 是一種簡寫方式。兩者表示的功能是一樣的,...
Swift3 建立字典
字典是由兩部分內容構成的,乙個是鍵 key 乙個是值 value 字典是一種儲存多個型別相同的值的容器。每個值都和乙個唯一的鍵相對應,這個鍵在字典裡就是其對應值的唯一標識。鍵是不能有重複元素的,而值是可以重複的 鍵和值是成對出現的。跟陣列不同,字典裡的元素並沒有特定的順序。在 字典 中使用鍵來查詢其...
Swift3廢除特性(一)
正式版的swift 3.0將隨著ios 10和macos sierra正式版在去年 2016年 秋季推出,但由 於swift開源的特性,使得我們能夠看到swift的開發進展。swift3.1已於今年春季退出,swift4.0將於今年秋季推出。先來回顧一下swift 3廢除的一些特性 1.棄用 與 操...