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) ?? ("" + "你好")) //最后在执行 ??