Swift4 模式, 列舉型

2022-08-18 04:30:15 字數 3840 閱讀 2311

建立: 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

列舉型名

例:

enum

sample1

enum

sample2

● 元素可以比較是否相等 ==, !=

方法定義 

和其他方法定義一樣

enum

sample2: 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

enum

sample3: int

let myenumtest3: sample3 =.d

print(myenumtest3.rawvalue)

//103

列舉型的建構函式

靜態變數, 靜態方法 

只可定義計算型屬性var sample: type set }

● 自帶建構函式init?(rawvalue:)

sample.init(rawvalue: 1)

● 自定義建構函式

self = 例項

init()

● 靜態變數, 靜態方法: 開頭加 static

靜態變數用作預設值,靜態方法用來設定預設值等

共用型的列舉型

共用型列舉型

enum

型名

enum

sample4

生成例項

let myenumtest4 = sample4.a("

1", "

2")

元素不能互相比較

要比較則自己去採用equalable

● 用在switch裡時, 可用下兩種方法獲取值, 兩種方法作用相同

case

let sample4.a(str1, str2)

case sample4.a(let str1, let str2)

● 元組可帶標籤, switch的case裡面可以省略標籤

let/var 和標籤連用時, 寫法注意

case

let .(first: a, second: b)

case .(first let a, second let b)

if-case

不帶元組的列舉型(簡單列舉型), 值型列舉型可以比較

共用型列舉型的比較只能用switch, 除非自己採用equalable

比較方法

if case模式 = 式, ...

if

case .a =p

ifcase let .a(x, y) =p

ifcase .t(10, let y)? = p

● , ...可以寫模式匹配, 條件句, 可選繫結等

for-in中使用case

case也可以用在for-in

for

case 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

enum

sample5

● 比較多時可以在enum前加上indirect

indirect enum

sample5

可選型與列舉型

可選型由共用型列舉型定義

public

case

none

case

public

...}

以下兩用法相同

var sample: int? = 100

ifcase 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主要側重於說明開源...