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

可选项绑定

可用来 判断可选项是否包含值。
如果包含,就自动解包,把值赋给一个临时量(letvar),并返回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语句

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")
}
上一篇下一篇

猜你喜欢

热点阅读