【问题标题】:Implicitly unwrapped optionals隐式展开的选项
【发布时间】:2016-03-24 06:10:31
【问题描述】:

我很好奇为什么隐式展开的可选 display.text 需要在下面的代码中展开。 (来自斯坦福 CS193p)

@IBOutlet weak var display: UILabel!

@IBAction func appendDigit(sender: UIButton) {
        if let digit = sender.currentTitle {
            if userIsTypingNumber {
                display.text = display.text! + digit
            } else {
                display.text = digit
            }
        }
}

为什么在等号之后被认为是可选字符串,而不是在等号之前?

【问题讨论】:

    标签: ios swift optional


    【解决方案1】:

    UILabel display 是一个隐式展开的可选项,而不是它的属性 text:该属性是一个普通的可选项。

    因此,虽然您不必手动解开 display,但您必须为 display.text 执行此操作。

    【讨论】:

      【解决方案2】:

      Unwrap optional type 变量用于获取该值在变量中的内容(可以为nil)

      查看UILabel的定义:

      public class UILabel : UIView, NSCoding {
      
          public var text: String? // default is nil
          ...
      }
      

      text 属性是 optional type。因此,当获取(访问)此值时,您需要将其解包。在您使用的代码中!从display 标签到force-unwrap text 属性。

      当给一个 optional type 赋值时,你不会解包,只是作为普通变量赋值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多