美文网首页
Swift 可选类型

Swift 可选类型

作者: 小强七号 | 来源:发表于2019-07-16 23:47 被阅读0次

Switf的可选类型(optional)类型,用于处理值缺失的情况。可选表示”那儿有一个值,并且它等于 x 或者 “那儿没有值”。Swift语言定义后缀 ?作为命名可选类型的简写,以下两种声明是可等的:

var optionalInteger: Int ?
var optionalInteger: Optional<Int>

在这两种情况下,变量optionalInteger都是可选类型。注意,在类型和?之间没有空格。Optional是一个包含两种情况的枚举,Nonesome(T),用来表示可能有或者可能没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候。要确保用括号给 ? 操作符一个合适的范围。例如,声明可选整数数组,应该写成 (Int[])?,写成 Int[]? 会报错。当你声明一个可选变量或者可选属性的时候没有提供初始值,它的值默认为 nil。可选项遵照LogicValue协议,因此可以出现在布尔环境中。在这种情况下,如果可选类型为 T?包含类型为T的任何值(也就是说它的值时 Optional.Some(T)),这个可选类型等于 true,反之为false.如果一个可选类型的实例包含一个值,你可以用后缀操作符!来访问这个值,如下所示:

optionalInteger = 42
optionalInteger ! // 42

使用操作符 !去获取值为nil的可选变量会有运行错误。你可以用可选链接和可选绑定选择性执行可选表达式操作。如果值为nil,任何操作都不行,也不会有运行报错。

var myString:String?
myString = "hello world"
if myString != nil {            
      print(myString!)
    } else {
        print("字符串为 nil")
    }

以上结果为:

hello world

可选类型类似于OC中的指针的nil值,但nil只对类(calss)有用,而对可选类型对所有的类型都可用,并且更安全。

强制解析

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹(!)来获取值,这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)

  var myString:String?
 
  myString = "hello swift"
     
  if myString != nil {
         print(myString)
    } else {
         print("myString 值为 nil")
     }

执行结果为

Optional("hello swift")

强制解析可选值,使用感叹号(!):

var myString:String?
     
 myString = "hello swift"
        
if myString != nil {            
    print(myString!)
} else {
     print("myString 值为 nil")   
}

输出结果为:

hello swift

注意:使用 ! 来获取一个不存在的可选值会导致运行时错误。使用 ! 来强制解析值之前,一定要确定可选包含一个非nil的值。

可选绑定

使用optional binding来判断optional类型是否有值,并且如果有值就把值赋给一个常量或者临时变量。
optional binding可以用在 if 和 while 语句中:

if let constantName = someOptional {
     print("get the value: \(constantName)")
}


//如果someOptional这个optional类型有值,创建一个叫做constantName的常量并将someOptional包含的值赋给它。
//并且因为constantName已经被optional类型包含的值初始化过,所以不需要再使用 ! 后缀来获取它的值。

var myString:String?
myString = "hello swift!"

if let yourString = myString {
    print("你的字符串是:\(yourString)")
} else {
    print("你的字符串没有值")
}

相关文章

网友评论

      本文标题:Swift 可选类型

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