美文网首页
Swift可选项

Swift可选项

作者: Arthur澪 | 来源:发表于2020-02-19 11:43 被阅读0次

    可选项(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语句

    • 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")
    }
    

    相关文章

      网友评论

          本文标题:Swift可选项

          本文链接:https://www.haomeiwen.com/subject/ozpgfhtx.html