Swift可选项
2020-02-19 本文已影响0人
Arthur澪
可选项(optionals)
用来处理值可能缺失的情况。它允许将值设置为nil
。一般也叫可选类型。可选类型表示两种可能:
- 有值, 你可以解析可选类型访问这个值
- 根本没有值。
在类型名称后面加个问号?
来定义一个可选项,表示该值可以为空。
var sex: String?
var name: String? = "Jack"
var age: Int? = 12
age = nil
var num: Int?
print(name,age, num)
// 打印结果 Optional("Jack") nil nil
可选项是对其他类型(如Int
)的一层包装 。可以将它理解为一个盒子。
如果为nil
,那么它是个空盒子;
如果不为nil
,那么盒子里装的是:被包装类型的数据。
强制解包
如果要取出被包装的数据,需使用感叹号!
进行强制解包。
print(name)
// 打印结果 Optional("Jack")
print(name!)
// 打印结果 Jack
注意:如果对值为
nil
的可选项强制解包,将会产生运行时错误。
隐式解包
可以在类型后面加个!
,来定义一个隐式解包的可选项。
let num1: Int! = 10
可选项绑定
可用来 判断可选项是否包含值。
如果包含,就自动解包,把值赋给一个临时量(let
或var
),并返回true,否则返回false。
var age: Int?
if let number = age {
print("字符串转换整数成功:\(number)")
// number是强制解包之后的Int值
// number作用域仅限于这个大括号
} else {
print("空")
}
// 字符串转换整数成功:123
var sex: String? // 可选项,可能为空
guard let mysex = sex else{
// 判断并自动解包,把值赋给mysex
return ;
}
print( mysex );
等价写法
var value = 100
if value <= 100, value >= 100, value == 100{
print(value)
}
if value <= 100 && value >= 100 && value == 100{
print(value)
}
空合并运算符 ??
如a ?? b
(类似于三目运算符a?a:b
)
a 是可选项
b 可能是 可选项
b 跟 a 的类型必须相同
a ?? b
表示:如果 a 不为nil
,就返回 a;如果 a 为nil
,就返回 b。如果 b 不是可选项,返回 a 时会自动解包。
与if 语句配合:
let a: Int? = nil // a是可选项,并且设为nil
let b: Int? = 2
if let c = a ?? b {
print(c) // 打印结果 2
}
guard语句
guard 条件 else {
// do something....
}
当guard
语句的条件为false
时,就会执行{ }
里面的代码;
为true
时,就会跳过guard
语句
- guard语句配合 可选项绑定:
绑定的常量(let)、变量(var)也能在else{ }
外层作用域中使用
func login(_ info: [String : String]) {
guard let username = info["username"] else {
print("请输入用户名")
return
}
guard let password = info["password"] else {
print("请输入密码")
return
}
// if username ....
// if password ....
print("用户名:\(username)", "密码:\(password)", "登陆ing")
}