美文网首页
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