Swift可选项的判断
/**
* 1. ?? 是一个三目 见demo1
- 如果有值,使用值
- 如果没有值,使用 ?? 后面的值
2. if let / var 连用语法,目的就是判断值,见 demo2
3. guard 守卫 / 守护, 如果没有值,就直接返回;否则继续往下。
4. guard let & if let 的技巧,变量 请看demo4
*/
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// demo(x: 10, y: 100)
// demo1(x: 10, y: 200)
demo2()
}
func demo4(name: String?, age: Int?)
{
if let name = name, let age = age
{
print("name=" + name + "; age=" + String(age))
}
// guard let & if let 的技巧
// 使用同名的变量接收值,在后续使用的都是非空值,不需要解包
// 好处,可以避免起名字的烦恼
guard let name = name, let age = age else
{
print("姓名或者年龄为空");
return;
}
print("name=" + name + "; age=" + String(age))
}
func demo3()
{
let oName: String? = "tanb"
let oAge: Int? = 10
// guard let 守护一定有值,如果没有值,直接返回
guard let name = oName, let age = oAge else
{
print("姓名或者年龄为nil")
return
}
print(name + String(age))
}
// MARK: - if let / var 连用语法,目的就是判断值
func demo2()
{
let oName: String? = "唐斌"
let oAge: Int? = 10
if oName != nil && oAge != nil
{
print(oName! + String(oAge!))
}
// if let 连同, 判断对象的值是否为 nil
if var name = oName, let age = oAge
{
name = "老王"
// 进入分支之后,name he age 一定有值,不需要解包
// name 和 age 的作用域仅在 {} 中
print(name + String(age))
}
else
{
print("name 或 age 为 nil")
}
}
// MARK: - ??
func demo1(x: Int?, y: Int?)
{
/**
?? 是一个简单地 三目
- 如果有值,使用值
- 如果没有值,使用 ?? 后面的值替代
*/
print((x ?? 0) + (y ?? 0))
let name: String? = "唐斌"
// ?? 操作符号的优先级比较 ’低‘,在使用的时候,一般用 () 抱起来,就可以了
print((name ?? "") + "你好")
}
func demo(x: Int?, y: Int?)
{
// 1. 强行解包有风险
// print(x! + y!)
// 2. 使用 if 判断
// 但是:如果使用if,一不小心,会让代码很丑陋
/* if (x != nil && y !=nil)
{
print(x! + y!)
}
else
{
print("x 或者 y 为 nil")
}*/
}
}
posted on 2017-07-11 09:18 TangBin604 阅读(181) 评论(0) 编辑 收藏 举报