美文网首页
Swift 空合并运算符(Nil-Coalescing Oper

Swift 空合并运算符(Nil-Coalescing Oper

作者: 搬码小能手 | 来源:发表于2021-03-28 11:15 被阅读0次

    可选项的本质是enum类型

    API

    
    public func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?
    
    public func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T
    
    
    规则
    • a ?? b
    • a 是可选项
    • b 是可选项 或者 不是可选项
    • ba 的存储类型必须相同
    • 如果a不为nil ,就返回a
    • 如果anil,就返回b
    • 如果b不是可选项,返回a时会自动解包

    举例

    let a: Int? = 1
    let b: Int? = 2
    let c = a ?? b // let c: Int? Optional(1)
    
    let a: Int? = nil
    let b: Int? = 2
    let c = a ?? b //let c: Int? Optional(2)
    
    let a: Int? = nil
    let b: Int? = nil
    let c = a ?? b //let c: Int? , nil
    
    let a: Int? = 1
    let b: Int = 2
    let c = a ?? b //let c: Int , 1
    
    let a: Int? = nil
    let b: Int = 2
    let c = a ?? b // let c: Int , 2
    

    ?? 跟if let 配合使用

    let a: Int? = nil
    let b: Int? = 2
    
    if let c = a ?? b {
      print(c)
    }
    
    当不符合if let语法要求时.png

    这样做的好处是,当你不清楚b的类型的时候,编译器如果报错,说明b不是可选类型
    因为既然使用if let 语法,a ?? b 的值必须是可选类型,那么也就说明,b必须是可选类型

    注意事项(纯Swift不用考虑,swift是安全的语言。Objective-CSwift混编要注意)

    自从开始使用swift写项目的时候,更加注意数据类型,不然会引起严重bug!

    举例

    在纯swift开发的过程中,一般不会出现数据类型出错,因为系统可以检测出数据类型不一致,无法编译通过。

    SwiftObjective-C 混编的时候,Objective-C是没有可选类型这个概念的
    如果把Objective-CNSString类型直接赋给Swift中的String类型的时候,编译器是不会报错的!

    Objective-CNSString的值为nil的时候,问题就出现了,这个时候Swift中的String类型就无法接受nil
    而且更可怕的是,这个时候编译器是不会报错的!!!

    所以,在遇到swift类型接收Objective-C类型的时候,一定要确认Objective-C的数据类型。

    如果Objective-C定义数据类型,没有设置nonnull,此时Objective-C的数据类型是允许为nil的

    image.png

    相关文章

      网友评论

          本文标题:Swift 空合并运算符(Nil-Coalescing Oper

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