知识点:

  1. for in循环中的变量可以使用下划线_,意思是不需要用到此变量,系统就不会给变量分配存储空间
  2. switch中case后面必须有可执行的语句,如果有许多结果需要执行同一个语句的话,swift支持多条件匹配
  3. switch支持范围匹配
  4. switch可以匹配元组数据
  5. switch可以绑定数值
  6. switch中的case可以使用where来增加判断条件
  7. fallthrough关键字,当执行完前case后,会接着执行fallthrough后面的case或者default语句,fallthrough后面的case语句中的判断条件不能定义变量
  8. 标签

示例代码:


//: Playground - noun: a place where people can play

import UIKit

// 1、for in循环
// 这里的i是let型,即常量,如果在循环体重更改i的值的话会报错
for i in 1...4 {
    println("***********\(i)")
}
// 如果没用到i值的话,可以将其写成下划线_,这样系统就不会为i开辟存储空间
for _ in 1...4 {
    println("***********")
}


// 2、switch语句
// switch要求必须处理所有情况,否则报错。所以default一般是不省略
// swift中switch语句的参数可以是字符串
// swift中的switch的case中没有break
let flag = "abc"
switch flag {
    case "abc":
        println("abc")
    case "bcd":
        println("bcd")
    case "def":
        println("def")
    default:
        println("default")
}

// switch中case后面必须有可执行的语句,如果有许多结果需要执行同一个语句的话,swift支持多条件匹配
var gread = 90 / 10
switch gread {
    case 10, 9:
        println("优秀")
    case 8, 7:
        println("良好")
    case 6:
        println("及格")
    default:
        println("不及格")
}

// switch中的范围匹配
var score = 95
switch score {
    case 90...100:
        println("优秀")
    case 89...60:
        println("良好")
    default:
        println("不及格")
}

// switch匹配元组数据
// 判断point是否在一个X轴为-2...2,Y轴为-2...2的矩形框内
let point = (1, 1)
switch point {
    case (0, 0):
        println("这个点是坐标原点")
//    这里的下划线_可以理解为忽略掉X轴的值,或者理解为任何值都行
    case (_, 0):
        println("这个点在X轴上")
    case (0, _):
        println("这个点在Y轴上")
    case (-2...2, -2...2):
        println("这个点在一个X轴为-2...2,Y轴为-2...2的矩形框内")
    default:
        println("这个点在矩形之外")
}

// case的数值绑定
let point1 = (10, 0)
switch point1 {
    case (let x, 0):
        println("点位于X轴上,X值为\(x)")
    case (0, let y):
        println("点位于Y轴上,Y值为\(y)")
//    这里的写法相当于case (let x, let y)
    case let (x, y):
        println("X值为\(x),Y值为\(y)")
}

// switch中的case可以使用where来增加判断条件
let point2 = (10, -10)
switch point2 {
    case let (x, y) where x == y:
        println("单调递增")
    case let (x, y) where x == -y:
        println("单调递减")
    default:
        println("不在这两条线上")
}

// fallthrough
// 当执行完前case后,会接着执行fallthrough后面的case或者default语句
// fallthrough后面的case语句中的判断条件不能定义变量
let num = 20
var str = "\(num)是个"
switch num {
    case 0...50:
        str += "0~50之间的"
        fallthrough
    default:
        str += "整数"
}


// 3、标签
out: for _ in 1...2 {
    
    for _ in 1...3 {
        println("start")
        
//        这里的break是跳出当前循环
//        break
        
//        这里的break是跳出父循环,out就是标签
        break out
    }
    
    println("==========")
}