美文网首页
Swift 之 ?、!、as、as!、as?(看我这点就够)

Swift 之 ?、!、as、as!、as?(看我这点就够)

作者: 黄成瑞 | 来源:发表于2020-10-22 16:29 被阅读0次
    1.?
    定义:用?修饰的常量或者变量,代表这是一个可选类型的常量或者变量,就是说这个量可以有值,也可以没有值。如下例子,如果num有值就是int类型,如果没有值那就是nil
    例子:
      let num: Int?                        // nil类型
      let num: Int? = 2                    // int类型
    
    2.!
    定义:如果要操作一个可选类型的变量,并且你需要进行强解包的时候,你就会用到!。如果有值就会得到变量的值,如果为nil那么程序就会crash
    
    例子:
      // 定义一个String的可选类型str,显示赋值,不会crash,正常。
      var str: String? = "皇晓晨"
      let message = "你好" + str!
      print(message)
    
      // 定义一个String的可选类型str,不进行显示赋值,会crash
      var str: String? 
      let message = "你好" + str!
      print(message)
      Fatal error: Unexpectedly found nil while unwrapping an Optional value (致命错误:在展开可选值时意外发现nil)
    
    
    3.as
    定义:有保证的转换,从派生类转换为基类的向上类型
    
    场景1:(从派生类转换为基类,向上转型)
      class Animal {}
      class Cat: Animal {}
      let cat = Cat {}
      let animal = cat as Animal
    
    场景2:(数值类型转换,消除二义性)
      let num1 = 10 as CGFlot
      let num2 = 10 as Int
      let num3 = (10 / 2) as Double
      
    场景3:(switch语句中进行模式匹配)
      switch animal {
        case let cat as Cat:
          print("如果是Cat类型对象,则做相应处理")
        case let dog as Dog:
          print("如果是Dog类型对象,则做相应处理")
        default: break
      }
    
    4.as!
    定义:强制类型转换,向下转型时使用,如果转换失败会报runtime运行错误
    
    例子:
      class Animal {}
      class Cat: Animal {}
      let animal: Animal = Cat()
      let cat = animal as! Cat
    
    5.as?
    定义:与as!操作符的转换规则完全一样,但是as?如果转换不成功的时候便会返回一个nil对象。成功的话返回可选类型值。由于as?在转换的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可以使用as!,否则用as?
    
    例子:
      let animal: Animal = Cat()
      if let cat = animal as? Cat {
        print("转换成功~")
      } else {
        print("转换失败,是个nil")
      }
    

    到这,我相信你对这些符号有了深入的了解,哈哈哈,是不是很容易理解,拿走不谢~~~

    参考文章

    相关文章

      网友评论

          本文标题:Swift 之 ?、!、as、as!、as?(看我这点就够)

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