定義一個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中的第二項