2016-03-24 21 views
1

我很好奇为什么需要在下面的代码中解开隐式解包可选,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 
      } 
     } 
} 

为什么它被认为是等号后的可选字符串,但不是之前?

回答

3

UILabel display是一个隐式解包的可选项,而不是它的属性text:该属性是一个正常的可选项。

所以,虽然你不必手动解开display,但你必须为display.text做。

-1

展开optional type变量是使用得到变量这个值的内容(也可以是零)

看看定义的UILabel的:

public class UILabel : UIView, NSCoding { 

    public var text: String? // default is nil 
    ... 
} 

text属性是optional type。所以当获得(访问)这个值时,你需要解开它。在你的代码中使用! force-unwraptext财产display标签。

而且,如果您将值分配给某个未打包的元素,只需将其分配为普通变量即可。