從零學習Swift 3

2021-07-09 14:13:57 字數 4315 閱讀 2249

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.棄用 與 操...