美文网首页
Swift 5 可选类型(Optionals)

Swift 5 可选类型(Optionals)

作者: 鬼把戏 | 来源:发表于2019-10-08 10:01 被阅读0次

    可选类型(Optionals)

    • 可选项: 允许将其设置为nil
    var name: String? = "jack"
    var age: Int?
    age = 10
    

    • 强制解包
    var age1: Int?
    age1!  //Fatal error: Unexpectedly found nil while unwrapping an Optional value:
    age1 = 10
    age1!  //确定可选性不为空的时候才可以强制解包
    
    • 可选项绑定: 通过把值赋给一个临时的常量(let)或者变量(var),并返回true/false ,ture 就会自动解包
    if let num = Int("123"), num > 0 { //多条件判断时,与可选项绑定邻近的条件与可选项绑定之间用“,”连接,不可以用&&
        print(num)
    } else {
        print("false")
    }
    

    • 空合并运算符

    a ?? b

    1. a 是可选项
    2. b 是可选或者不是可选
    3. a和b的存储类型必须相同
    4. a != nil 返回 a
    5. a == nil 返回 b
    6. b 不是可选类型时,返回的 a 是会d自动解包
    7. 注意返回值得类型

    • guard 语句
    let info: [String : String] = ["user" : "swift"]
    
    func guardTest() {
        guard var user = info["user"] else { // false 时执行大括号里的代码。 true 时跳过 guard 语句继续执行
            return                           // 必须跳出当前作用域, return,break,continue,throw,error
        }
        
        user = "oc"                         // guard 语句进行可选绑定时, 绑定的let,var 可以在 guard 的外层作用域中使用  
        print(user)
    }
    
    guardTest()
    
    

    • 隐式解包: 可以不进行检查,也可以访问时不进行解包。因为会自动解包。 但是因为是可选类型可能为 nil,使用时 nil 会编译时报错。能确定一直有值不为 nil 的时候可以使用
    var num1: Int! = 10
    num1 = nil
    var num2: Int = num1 ?? 0
    

    • 多重可选项
    var num1: Int? = 10
    var num2: Int?? = num1
    var num3: Int?? = 10
    
    print(num2 == num3)
    let n = (num2 ?? 10) ?? 2
    
    var num4: Int? = nil
    var num5: Int?? = num1
    var num6: Int?? = nil
    
    print(num5 == num6)
    
    // frame variable -R / fr v -R 查看内存结构 查看详细问题
    
    

    相关文章

      网友评论

          本文标题:Swift 5 可选类型(Optionals)

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