目錄
一揪阶,基礎(chǔ)語法
二,流程控制
三患朱,函數(shù)
四鲁僚,枚舉
五,枚舉的內(nèi)存布局
六裁厅,可選項(xiàng)
一冰沙,基礎(chǔ)語法
1,常量和變量
- 用
let
定義常量执虹,用var
定義變量 - 常量只能賦值一次拓挥,變量可以賦值多次
- 不能使用未初始化的常量和變量
- 在定義常量和變量時(shí),如果有初始化就不需要聲明類型袋励,否則就需要聲明
2撞叽,常見數(shù)據(jù)類型
- 在32位平臺(tái),
Int
等價(jià)于Int32
插龄;在64位平臺(tái),Int
等價(jià)于Int64
-
Float
的精度只有6位科展,Double
的精度至少15位
3均牢,元組
- 元素個(gè)數(shù)必須大于1個(gè)
- 有元素名稱就用名稱訪問,否則就用下標(biāo)訪問
- “
_
”表示忽略該參數(shù)
4才睹,typealias
二徘跪,流程控制
1甘邀,if-else
2,while
-
repeat-while
相當(dāng)于C
語言中的do-while
- 從
Swift3
開始垮庐,去除了自增(++
)松邪、自減(--
)運(yùn)算符
3,for
- 閉區(qū)間運(yùn)算符
- 半開區(qū)間運(yùn)算符
- 單側(cè)區(qū)間運(yùn)算符
- 間隔區(qū)間值
where
outer
4哨查,switch
- 基本使用
1>默認(rèn)可以不寫
break
逗抑,不會(huì)貫穿到后面的條件
2>使用fallthrough
可以實(shí)現(xiàn)貫穿的效果
3>如果已經(jīng)處理所有的情況,可以不寫default
- 復(fù)合條件
- 元組匹配
- 區(qū)間匹配
- 值綁定
where
三寒亥,函數(shù)
1邮府,基本使用
2,參數(shù)使用
- 參數(shù)標(biāo)簽
- 默認(rèn)參數(shù)值
- 可變參數(shù)
- 輸入輸出參數(shù)
1>用
inout
定義一個(gè)輸入輸出參數(shù)溉奕,可以在函數(shù)內(nèi)部修改外部實(shí)參的值
2>可變參數(shù)不能標(biāo)記為inout
3>inout
參數(shù)不能有默認(rèn)值
4>inout
參數(shù)不能傳入常量
5>inout
參數(shù)的本質(zhì)是地址傳遞
3褂傀,函數(shù)重載
- 函數(shù)名相同
- 參數(shù)個(gè)數(shù)不同或者參數(shù)類型不同或者參數(shù)標(biāo)簽不同
- 返回值與函數(shù)重載無關(guān)
4,內(nèi)聯(lián)函數(shù)
- 將函數(shù)調(diào)用展開成函數(shù)體
-
Xcode
在Release
模式下默認(rèn)會(huì)開啟編譯器優(yōu)化加勤,編譯器會(huì)自動(dòng)將某些函數(shù)變成內(nèi)聯(lián)函數(shù) - 不會(huì)被自動(dòng)內(nèi)聯(lián)的函數(shù):函數(shù)體比較長仙辟、包含遞歸調(diào)用、包含動(dòng)態(tài)派發(fā)
- 由于編譯器會(huì)自動(dòng)優(yōu)化鳄梅,所以我們沒必要使用
@inline
5叠国,函數(shù)類型
- 類型格式
- 作為參數(shù)
- 作為返回值
6,嵌套函數(shù)
7卫枝,文檔注釋
四煎饼,枚舉
1,基本使用
2校赤,原始值
- 顯式原始值
- 隱式原始值
3吆玖,關(guān)聯(lián)值
4,遞歸枚舉
5马篮,定義方法
五沾乘,枚舉的內(nèi)存布局
1,MemoryLayout
-
stride
:分配的內(nèi)存大小 -
size
:使用的內(nèi)存大小 -
alignment
:內(nèi)存對齊參數(shù)
2浑测,無原始值無關(guān)聯(lián)值
- 每個(gè)
case
都有一個(gè)序號(從0開始)翅阵,序號也稱為成員值 - 成員值存儲(chǔ)在枚舉變量中,在結(jié)合
switch
使用時(shí)迁央,需要區(qū)分枚舉變量屬于哪一個(gè)case
- 由于枚舉變量只存儲(chǔ)成員值掷匠,所以分配1個(gè)字節(jié)就足夠了
3,有原始值
- 原始值是固定的岖圈,也是所有枚舉變量公共的讹语,所以它不存儲(chǔ)在枚舉變量中
- 由于枚舉變量還是只存儲(chǔ)成員值,所以也只分配1個(gè)字節(jié)
4蜂科,有關(guān)聯(lián)值
- 關(guān)聯(lián)值是動(dòng)態(tài)的顽决,也是每個(gè)枚舉變量獨(dú)有的短条,所以它存儲(chǔ)在枚舉變量中
- 枚舉變量的內(nèi)存等于關(guān)聯(lián)值和成員值的內(nèi)存之和,而關(guān)聯(lián)值取
case
中占用內(nèi)存最大的一個(gè) -
25(使用的內(nèi)存)= 3 * 8(關(guān)聯(lián)值)+ 1(成員值)
才菠,由于內(nèi)存對齊茸时,所以分配了32個(gè)字節(jié)
5,一個(gè)case
- 只有一個(gè)
case
赋访,在結(jié)合switch
使用時(shí)無需區(qū)分可都,所以枚舉變量不用存儲(chǔ)成員值 - 由于枚舉變量不用存儲(chǔ)任何數(shù)據(jù),所以它不占用內(nèi)存空間
六进每,可選項(xiàng)
1汹粤,基本介紹
- 可選項(xiàng)允許將值設(shè)置為
nil
- 可選項(xiàng)是對其他類型的一層包裝,可以將它理解為一個(gè)盒子
- 如果不為
nil
田晚,里面裝的是其他類型的數(shù)據(jù)嘱兼;如果為nil
,它就是一個(gè)空盒子
2贤徒,強(qiáng)制解包
- 強(qiáng)制解包就是從盒子中取出數(shù)據(jù)
- 不能對值為
nil
的可選項(xiàng)進(jìn)行強(qiáng)制解包
3芹壕,隱式解包
4,可選項(xiàng)綁定
- 可選項(xiàng)綁定用來判斷可選項(xiàng)是否為
nil
- 如果不為
nil
就返回true
并自動(dòng)解包接奈,否則就返回false
5踢涌,guard
- 與可選項(xiàng)綁定結(jié)合使用
- 如果可選項(xiàng)不為
nil
就自動(dòng)解包并跳過大括號,否則就執(zhí)行大括號里面的代碼
6序宦,空合并運(yùn)算符
-
a ?? b
睁壁,a
必須是可選項(xiàng),b
可以不是 -
a
和b
的類型必須相同 - 如果
a
不為nil
就返回a
互捌,否則返回b
- 如果
b
不是可選項(xiàng)潘明,返回a
時(shí)會(huì)自動(dòng)解包
7,多重可選項(xiàng)
- 有值的情況
- 無值的情況