Swift - Optionals

  • 简述

    Swift 4 还引入了 Optionals类型,它处理没有值的情况。可选项说“有一个值,它等于 x”或“根本没有值”。
    Optional 本身就是一种类型,实际上是 Swift 4 新的超级强大的枚举之一。它有两个可能的值,NoneSome(T), 在哪里 T 是 Swift 4 中可用的正确数据类型的关联值。
    这是一个可选的整数声明 -
    
    var perhapsInt: Int?
    
    这是一个可选的字符串声明 -
    
    var perhapsStr: String?
    
    上面的声明等价于显式地将其初始化为 nil 这意味着没有价值 -
    
    var perhapsStr: String? = nil
    
    让我们以下面的例子来理解 Swift 4 中的可选项是如何工作的 -
    
    var myString:String? = nil
    if myString != nil {
       print(myString)
    } else {
       print("myString has nil value")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    myString has nil value
    
    Optionals 类似于使用 nil 使用 Objective-C 中的指针,但它们适用于任何类型,而不仅仅是类。
  • 强制展开

    如果您将变量定义为 optional,然后要从此变量中获取值,您必须 unwrap它。这只是意味着在变量的末尾放置一个感叹号。
    让我们举一个简单的例子 -
    
    var myString:String?
    myString = "Hello, Swift 4!"
    if myString != nil {
       print(myString)
    } else {
       print("myString has nil value")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    Optional("Hello, Swift 4!")
    
    现在让我们应用解包来获取变量的正确值 -
    
    var myString:String?
    myString = "Hello, Swift 4!"
    if myString != nil {
       print( myString! )
    } else {
       print("myString has nil value")
    }
    
    当我们使用 Playground 运行上述程序时,我们得到以下结果。
    
    Hello, Swift 4!
    
  • 自动解包

    您可以使用感叹号而不是问号来声明可选变量。此类可选变量将自动解包,您无需在变量末尾使用任何其他感叹号即可获得分配的值。让我们举一个简单的例子 -
    
    var myString:String!
    myString = "Hello, Swift 4!"
    if myString != nil {
       print(myString)
    } else {
       print("myString has nil value")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    Hello, Swift 4!
    
  • Optionals绑定

    使用可选绑定来确定一个可选是否包含一个值,如果是,则将该值作为临时常量或变量可用。
    一个可选的绑定 if 声明如下 -
    
    if let constantName = someOptional {
       statements
    }
    
    让我们举一个简单的例子来理解可选绑定的用法 -
    
    var myString:String?
    myString = "Hello, Swift 4!"
    if let yourString = myString {
       print("Your string has - \(yourString)")
    } else {
       print("Your string does not have a value")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    Your string has - Hello, Swift 4!