天天看點

SWIFT Tuple Pattern及Struct Pattern

定義一個Tuple

let color = (1.0,1.0,1.0,1.0)

switch color{

case (0.0,0.5...1.0,let blue,_): //比對第一個值為0.0第二個值為0.5到1.0第三四值為任意,并将第三個值傳給blue變量

    println("Blue is \(blue)")

case let (r,g,b,1.0) where r == g && g == b: //額外條件where 本個亦是的值要相等

    println("Opaque grey \(r * 100)%")

default:

    println("unkonw")

}

比對模式混合應用,更加強大及有效,

class State{

    var name:String?

    var population:Double?

    var abbr:String?

    init(name:String,pop:Double,abbr:String){

        self.name = name

        self.population = pop

        self.abbr = abbr

    }

func stateFormPlist(list:Dictionary<String,AnyObject>) -> State? {

    switch(list["name"],list["pupulation"],list["abbr"]){ //建立Tuple,檢查要檢查的元素

        case (

              .Some(let listName as NSString), //對應相對應位置的Tuple元素

              .Some(let pop as Double),

              .Some(let abbr as NSString)

            ) where abbr.length == 1:

        return State(name: listName, pop: pop, abbr: abbr)

    default:

        println("b")

    return nil

var mylist = ["name":"Beijing","population":20000000,"abbr":"京"]

var result = stateFormPlist(mylist)

println(result?.abbr)  //京

println(result?.name) //Beijing

println(result?.population) //20000000

元祖就說完了,接下來定義一個Struct

struct Color {

    var red:Double?

    var green:Double?

    var blue:Double?

    var alpha:Double?

    init(red:Double,green:Double,blue:Double,alpha:Double){

        self.red = red

        self.green = green

        self.blue = blue

        self.alpha = alpha

var mycolor = Color(red: 10, green: 20, blue: 60, alpha: 1.0)

switch mycolor{

case let a where a.red == 10 && a.blue == 60:

    println("yes")

使用下劃線(_)忽略部分數值:

var loginResult = (true, "Login Success")

let (isLoginSuccess,_) = loginResult

if isLoginSuccess {

    println("登入成功")

    println(loginResult.0)  //通路Tuple中的第一項

    println(loginResult.1)  //通路Tuple中的第二項