swift学习-switch,函数-12/23

昨天确实很忙,没来得及更新,补到今天了。
书看到120页了,越发觉得swift是一门不错的语言。今天抽空翻了翻swift的论坛,感觉要学的东西还有好多,一点一点进步吧。
工作上一个挺恶心的任务快完成了,算是一个好消息。
笔记如下:
1 switch语句,与c和java不同,在swift中,当匹配的case执行完毕后,程序会终止switch语句,而不会继续执行下一个case块。无需显示指定break。
例如:

let c: Character = "e"

switch c {
case "a", "e", "i", "o", "u" :
    print("\(c) is a vowel")
case "b", "c":
    print("\(c) is a consonant")
default:
    print("\(c) is not a vowel or a consonant")
}

每一个case都必须包含至少一条语句

case “A”:
case “B’: //这样是错误的

let i: Int = 5

switch i {
case 1...3:
    print("\(i) in [1, 3]")
case 4...6:
    print("\(i) in [4, 6]")
default:
    print("\(i) in [7, 100]")
}

let somePoint = (1, 2)

switch somePoint {
case (0, 0):
    print("(0, 0) is at the origin")
case (_, 0):  // _ 表示任意
    print("(\(somePoint.0), 0 is on the x-axis")
case (-2...2, -2...2):
    print("(\(somePoint.0), \(somePoint.1)) is inside the box")
default:
    print("(\(somePoint.0), \(somePoint.1)) is outside the box")
}

不像c语言,swift允许多个case匹配同一个值。如果存在多个匹配,那么只会执行第一个匹配,其余的case块会被忽略。

let anotherPoint = (0, 2)

switch anotherPoint {
case(let x, 0): //值绑定
    print("on the x-axis with an x value of \(x)")
case(0, let y):
    print("on the y-axis with an y value of \(y)")
case(let x, let y):
    print("(\(x), \(y))")
}

case块还可以使用where语句来增加额外的条件

let yetAnotherPoint = (1, -1)

switch yetAnotherPoint {
case let(x, y) where x == y:
    print("x == y")
case let(x, y) where x == -y:
    print("x == -y")
case let(x, y):
    print("(\(x), \(y)")
}

2 函数,函数的语法和python不太相同,同时参数的传入传出也有特殊要求。
例如:

func testFunc() -> (first : Int, second : Int) {
    return (1, 2) //(second: 1, first: 2) or (first: 1, second: 2) or (1, second: 2) or (1, first: 2)都是对的
}

let funcRes = testFunc()

func testFunc2(first first: Int, second: Int = 2) {
    print("first is \(first), second is \(second)")
}

testFunc2(first: 1, second: 2)//testFunc2(second: 1, first: 2), or testFunc2(first: 1, second:2 )都不对
testFunc2(first: 1) //默认参数,类似c++
//指定外部参数名的方式,如果是第一个参数,写两遍,从第二个参数开始,默认就是外部参数
//func testFunc2(first first: Int, second: Int) …

函数内部,外部参数:
内部参数:只能在函数内部用
外部参数:外部调用时指定参数名,指定外部参数名后,调用时必须指定参数名。
新版swift中,从第二个参数开始,默认为外部参数,并且必须指定。
注:swift的参数传入顺序必须和定义时完全一致。
可变参数

func findMax(numbers: T...) -> T {
    var max = numbers[0]

    for number in numbers {
        if (max < number) {
            max = number
        }
    }

    return max;
}

let max = findMax(1, 2, 3, 2, 7, 3, 1)

print(max)

注意:函数参数默认是常量,可以使用var声明来修改为变量
in-out,通过in-out修饰的参数,可以被改变,并在离开函数时依然有效,类似c++的引用。
例如:

func mySwap(inout left: T, inout right: T) {
    (left, right) = (right, left)
}

var left = 2, right = 3

mySwap(&left, right: &right)
print(left, right)

北京的雾霾好像快散了。
再艰难的险阻也终抵挡不住梦想前进的步伐。
希望总是生于最绝望的时刻。
有这么好的起点,确实没有任何借口了。
前进吧,带着最后的倔强。

你可能感兴趣的:(swift学习-switch,函数-12/23)