什么是解包变量?

时间:2016-09-09 23:50:10

标签: swift

我一直试图理解选项的概念并隐含地解开可选的但我还没有得到术语?我的问题是:

  1. 编程包含什么?包裹的字符串是什么?
  2. 什么是解缠?
  3. Optional(?)和隐式解包功能(!)
  4. 之间的区别是什么
  5. 你什么时候用?或者!
  6. 隐含地隐含在未解包的可选项中,它们的意思是什么?
  7. 只是揭示一个变量的真值,无论它是零还是值?

1 个答案:

答案 0 :(得分:6)

1.Wrapped意味着您将值放在变量中,该变量可能为空。例如:

let message: String? // message can be nil
message = "Hello World!" // the value "Hello World!" is wrapped inside the message variable.

print(message)  // print the value that is wrapped in message - it can be null.

2.Unwrap意味着你得到变量的值来使用它。

textField?.text = "Hello World!" // you get the value of text field and set text to "Hello World!" if textField is not nil.
textField!.text = "Hello World!" // force unwrap the value of text field and set text to "Hello World!" if text field is not nil, other wise, the application will crash. (you want to make sure that textField muse exists).

3.Optional:是一个可以为零的变量。当您使用其值时,您需要明确地解包它:

let textField: UITextField? // this is optional
textField?.text = "Hello World" // explicitly tells the compiler to unwrap it by putting an "?" here
textField!.text = "Hello World" // explicitly tells the compiler to unwrap it by putting in "!" here.

隐式解包可选(?)是可选的(值可以是nil)。但是当你使用它时,你不必告诉编译器打开它。它将被隐式强制解包(默认)

let textField: UITextField!
textField.text = "Hello World!" // it will forced unwrap the variable and the program will crash if the textField is nil.

4.如果您认为值可以为零,请尝试在大多数情况下始终使用可选(?)。仅当您100%确定变量在使用时不能为零时才使用隐式展开的可选(!)(但您无法在类构造函数中设置它)。

5.明确意味着自动,您不必告诉编译器,它会自动执行,而且它很糟糕,因为有时你不知道你正在打开一个可选的可能会导致程序崩溃。在编程中,显式总是更好的隐式。