必须将可选类型String的值解包为String的值类型吗?

时间:2019-06-03 22:47:19

标签: ios swift

我是iOS开发的新手。我正在练习在视图和控制器之间链接动作/插座。我的问题是我不知道为什么它会显示一些错误。您能看看我的代码并告诉我我所缺少的吗?

我收到以下错误:

  

可选类型'String?'的值必须解包为'String'类型的值

     

Coalesce使用“ ??”当可选值包含“ nil”时提供默认值

     

使用'!'强制展开。如果可选值包含“ nil”,则中止执行

代码如下:

@IBAction func submitAppointmentDetails(_ sender: Any) {
    appointmentSetName.text = "Congratulations," + nameField.text + "You have now set up an appointment with us!"
}

正在发生的事情的照片:https://imgur.com/a/WKT4EyE

编辑:@matt这是一个不同的问题,因为您认为这是重复项的线程没有我正在寻找的解决方案,但是该线程中的两个人确实为我提供了解决方案。如果我只是阅读您共享的线程,就永远找不到解决方案。

2 个答案:

答案 0 :(得分:0)

nameField.text提供了一个可选字符串,以便将其串联起来替换

appointmentSetName.text = "Congratulations," + nameField.text + "You have now set up an appointment with us!"

使用

appointmentSetName.text = "Congratulations," + nameField.text! + "You have now set up an appointment with us!"

答案 1 :(得分:0)

nameField.text的类型为String?,表示它是一个可选的字符串(它可能包含Stringnil)。 Swift不允许您连接可选字符串。您必须解开价值,并且基本上已经有了Swift提出的方法来提出问题:

  1. 您可以强制解开字符串nameField.text!。这样,您就告诉Swift'从该可选值中获取字符串值,我确定它不是nil',但是如果它是nil,这将使应用程序崩溃。

  2. 您可以通过??的方式使用合并运算符nameField.text ?? "<no_name>"。这将执行以下操作:如果nameField.text不是nil,则文本将正确显示;如果nameField.text为nil,则将显示"<no_name>"字符串。