Swift String Interpolation显示可选?

Jef*_*ois 13 interpolation swift

当我使用以下代码并且nameTextField为"Jeffrey"(或任何其他名称)时

@IBAction func helloWorldAction(nameTextField: UITextField) {

    nameLabel.text = "Hello, \(nameTextField.text)"

}
Run Code Online (Sandbox Code Playgroud)

nameLabel显示... Hello,Optional("Jeffrey")

但是,当我将之前的代码更改为包含"!"时 像这样:

@IBAction func helloWorldAction(nameTextField: UITextField) {

    nameLabel.text = "Hello, \(nameTextField.text!)"

}
Run Code Online (Sandbox Code Playgroud)

代码按预期工作,nameLabel显示....你好,杰弗里

为什么是"!" 需要,在我用来创建这个简单程序的视频教程中,他没有使用"!" 该计划按预期工作.

Cra*_*hon 16

另一种方法是在插值字符串中使用空合并运算符,以获得更漂亮的文本,而无需使用if let.

nameLabel.text = "Hello, \(nameTextField.text ?? "")"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它的可读性较差,但如果有很多字符串则可能更为可取.


Tom*_*art 12

选项必须打开.您必须检查它或强行打开包装.想象一下,将可选项作为一个放置值的框.在你可以访问之前,你需要把它拿出来.

if let name = nameTextField.text {
    nameLabel.text = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)

  • 对于字符串插值来说,这似乎是Swif创作者的一个糟糕的设计选择.我不知道有任何其他语言可以做到这一点.如果存在未打包的值,则打印更有意义,否则打印为空或零.或者不允许字符串插值中的选项.这给我们造成了大量的错误. (22认同)