昨天确实很忙,没来得及更新,补到今天了。
书看到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<T: Comparable>(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<T>(inout left: T, inout right: T) {
(left, right) = (right, left)
}
var left = 2, right = 3
mySwap(&left, right: &right)
print(left, right)
北京的雾霾好像快散了。
再艰难的险阻也终抵挡不住梦想前进的步伐。
希望总是生于最绝望的时刻。
有这么好的起点,确实没有任何借口了。
前进吧,带着最后的倔强。