demo()
func demo () -> () {
let x: Int? = 10
let y: Int? = 100
print(x! + y!) //強行解包有風險 //輸出 110
}
方法的創建
方法
demo0(x: 10, y: 120)
func demo0 (x: Int , y:Int) -> () {
print(x + y) //輸出 130
}
demo1(x: 10, y: 120)
func demo1 (x: Int? , y:Int?) -> () {
//強行解包有風險
print(x! + y!) //輸出 130
}
demo2(x: 10, y: nil) //如果傳的參數 是 nil 要小心了
func demo2 (x: Int? , y:Int?) -> () {
//使用 if 判斷 但是 會讓代碼很丑陋,凌亂
if x != nil && y != nil {
print(x! + y!)
}else {
print("x 或者 y 為 nil")
}
}
為了簡化 demo2 so demo3誕生了
demo3(x: 10, y: nil)
func demo3 (x: Int? , y:Int?) -> () {
print((x ?? 0) + ( y ?? 0)) // 輸出 10
/*
?? 是一個簡單地 三目
- 如果有值 使用值
- 如果沒有值 使用 ?? 后面的的值替代
*/
}
補充:
let name: String? = "啊啊"
print(name! + "你好") //輸出 啊啊你好
/*
let name1: String? = nil
print(name1! + "你好")//unexpectedly found nil while unwrapping an Optional value
*/
let name2: String? = "啊啊"
print((name2 ?? "") + "你好") //輸出 啊啊你好
let name3: String? = nil
print((name3 ?? "") + "你好") //輸出 你好
let name4: String? = "老王"
print(name4 ?? "" + "你好") // ?? 的優先級很低 只會輸出 老王
// 不知道你看懂沒上一個 它的原理其實是這樣的
//print((name4) ?? ("" + "你好")) //最后在執行 ??