建立: 2018/03/05
完成: 2018/03/05
更新: 2018/03/10 改變標題 [swift4 模式] -> [swift4 模式, 列舉型]
補充rawrepresentable協議
【任務表】todo
元組(taple)與switch
模式匹配(pattern matching): 檢驗構造和值是否一致的處理
case來使用元組
switch的待檢驗量可以是元組, 所有case列舉的例項的型必須一致
switch location
switch裡用where
● 可以對case的元組附加條件
在:前面寫
switch sample
● 可用逗號同時羅列多個條件
如果case裡有var/let, 要保證宣告的量的值一定會被決定
絕對可行的方法: 宣告的量所有匹配量都帶
switch sample
switch裡用可選型
switch sample
● 帶問號表示可能是nil, 非nil時進行下一步
1? 非nil且為1
nil 為nil
_? 非nil, 忽略值
列舉型
基本列舉型
共有型列舉型的一種
enum列舉型名
例:
enumsample1
enum
sample2
● 元素可以比較是否相等 ==, !=
方法定義
和其他方法定義一樣
enumsample2: customstringconvertible
}var description: string
}let myenumtest2: sample2 =.a
print(myenumtest2) //0
print(myenumtest2.getnext()) //
1
值型列舉型
enum型名: 實體型
● 所有成員都帶同型別的值, 值必須各不相同
● 所帶型叫實體型(raw type), 值為實體值(raw value)
● 實體型可為 各種int, float/double, bool, 字串, 這些的組合
● 預設值:
實體型為整數時, 預設第乙個第乙個為0, 不指定值的為前乙個的值+1
字串時, 不指定則為元素名的字串, string("元素名")
其他型時必須制定值
● 獲取實體值: rawvalue
enumsample3: int
let myenumtest3: sample3 =.d
print(myenumtest3.rawvalue)
//103
列舉型的建構函式
靜態變數, 靜態方法
●只可定義計算型屬性var sample: type set }
● 自帶建構函式init?(rawvalue:)
sample.init(rawvalue: 1)
● 自定義建構函式
self = 例項
init()
● 靜態變數, 靜態方法: 開頭加 static
靜態變數用作預設值,靜態方法用來設定預設值等
共用型的列舉型
共用型列舉型
enum型名
例
enumsample4
生成例項
let myenumtest4 = sample4.a("1", "
2")
●元素不能互相比較
要比較則自己去採用equalable
● 用在switch裡時, 可用下兩種方法獲取值, 兩種方法作用相同
caselet sample4.a(str1, str2)
case sample4.a(let str1, let str2)
● 元組可帶標籤, switch的case裡面可以省略標籤
let/var 和標籤連用時, 寫法注意
caselet .(first: a, second: b)
case .(first let a, second let b)
if-case
●不帶元組的列舉型(簡單列舉型), 值型列舉型可以比較
●共用型列舉型的比較只能用switch, 除非自己採用equalable
比較方法
if case模式 = 式, ...
例
ifcase .a =p
ifcase let .a(x, y) =p
ifcase .t(10, let y)? = p
● , ...可以寫模式匹配, 條件句, 可選繫結等
for-in中使用case
case也可以用在for-in
forcase let (a?, 10?) in array
● 和普通for-in一樣迭代, 只有滿足case才會執行**塊
採用協議
可以採用協議
● 值型列舉型
自動採用rawrepresentable, 帶有rawvalue, init?(rawvalue:)
protocol rawrepresentable}
enum型: 實體型, 協議1, 協議2, ...
● 共用型列舉型
enum型: 協議1, 協議2, ...
改寫自身元組內容的方法(method)
mutating func sample(x: int) ->bool
遞迴的構造體
● 在需要遞迴的case前加上indirect
enumsample5
● 比較多時可以在enum前加上indirect
indirect enumsample5
可選型與列舉型
可選型由共用型列舉型定義
publiccase
none
case
public
...}
以下兩用法相同
var sample: int? = 100ifcase let x? = sample //
不同於if-let: if let x = sample
ifcase let .some(x) = sample
模式匹配(pattern matching)
模式匹配的規則
略 # todo: supply [模式匹配的規則 p186]
模式匹配運算子
模式 ~= 受體
● 不需要case
swift4 學習筆記 二
用函式來定義乙個功能 定義乙個函式需要在函式名後面用小括號 來新增引數,用 來區分引數型別,名稱和返回值的型別 func greet name string,day string string let greetstring greet name snow day monday print gree...
Swift 4 流程控制
if語句 判斷條件不需要小括號,條件執行體必須要放在花括號中 var int6 int 6 if int6 0 print int6 else print 666666666 switch語句 switch中不需要強制寫break語句,但是在每個case裡必須有一條語句 fallthrough可以在...
回顧Swift 3,展望Swift 4
在swift 3 late 2016版本臨近發布之際,蘋果公司開發者工具部門高階總監chris lattner發給 swift evolution 郵件列表一篇長文。文中對swift 3的開發過程進行了回顧,並給出了對swift 4的期望。在對swift 3的回顧中,lattner主要側重於說明開源...