天天看點

Swift4 進階樣式比對

###case的使用 ######比對元組是否相等

let toupleT = (1,2)
if case (1,2) = toupleT{
    print("兩個元組相等")
}
複制代碼
           

######比對數組是否包含某個元素

let arrayT = [1,2,3,4,5]
for case 5 in arrayT{
    print("包含5")
}
複制代碼
           

######輸出數組裡的非空元素

let skills : [String?] = ["php","Swift",nil,"OC",nil,"JS"]
for case let skill? in skills{
    print(skill)
}
輸出:
/*
php
Swift
OC
JS
*/
複制代碼
           
enum Derection{
    case north, south, east, west(abbr: String)
}
let west = Derection.west(abbr: "W") //   west("W")

if case Derection.west = west{
    print(derectionStr)   //     west("W")
}
if case Derection.west(let derectionStr) = west{
    print(derectionStr)   //     W
}

複制代碼
           

###使用where ######輸出0..10裡是偶數的數字

// 輸出0..10裡是偶數的數字
for i in 0...10 where i % 2 == 0{
    print(i)
}
複制代碼
           

######也可以使用在更複雜的情況下 eg.電量例子

enum Power{
    case fullyCharged
    case normal(percent : Double)
    case outOfPower
}
let bettery = Power.normal(percent: 0.01)
switch bettery{
case Power.normal(let percentage) where percentage < 0.1:
    print("out of power")
case Power.normal(let percentage) where percentage >= 0.9:
    print("almost power")
default:
    print("normal power")
}
複制代碼
           

######使用逗号串聯條件 switch中的多個case預設是不向下貫通的,是以,我們不能像C語言一樣,通過羅列多個case來實作對多個條件統一處理的效果.要實作這樣的效果,我們隻能在一條case裡,用逗号分隔多個情況:

switch halfPower {
// ...
case .fullyCharged, .outOfPower
    print("Fully charged or out of power")
// ...
}
複制代碼
           

逗号除了用在

switch...case...

中表示邏輯或的概念,也可以用在

if

中表示邏輯與的概念,例如為了處理之前電量低的情況,我們還可以用

if

這樣來實作:

if case .normal(let percentage) = battery,case 0...0.1 = percentage {
    print("Almost out of power")
}
複制代碼
           

是以,當我們需要對多個條件遞進執行判斷的時候,不要寫下面這樣的

if

嵌套:

if A {
    if B {
        if C {

        }
    }
}
複制代碼
           

完全可以使用逗号把這些條件逐漸寫在一個

if

裡:

if A, B, C {

}
複制代碼
           

######使用tuple簡化多個條件的比較

let username = "[email protected]"
let password = 11111111
複制代碼
           

當我們要同時比較這兩個值時,最普通的寫法,就是在

if

中使用邏輯與(

&&

)操作符:

if username == "[email protected]" && password == 11111111 {
    print("correct")
}
複制代碼
           

如果你不喜歡在

if

中并列多個比較語句,我們還可以用case臨時生成一個

tuple

,并且,讓它和

username / password

進行比較:

if case ("[email protected]", 11111111) = (username, password) {
    print("correct")
}
複制代碼