错误:初始值设定条件的结合必须有可选的类型,而不是“字符串”
问题描述:
var firstName: String = "John Appleseed"
if let name = firstName {
print ("Hello, \(name)")
}
字符串错误出现在第二行:初始化器有条件的结合必须有可选的类型,而不是“字符串”错误:初始值设定条件的结合必须有可选的类型,而不是“字符串”
如何决定是否使用可选或非可选变量?
答
首先,让我们考虑if let
结构的意思。当你写
if let name = firstName {
print ("Hello, \(name)")
}
你告诉斯威夫特要
- 尝试展开
firstName
- 如果解缠的结果是成功的,分配展开到
name
- 如果结果的结果的解包成功,打印
"Hello, \(name)"
换句话说,这个构造用于处理可选变量的解包。然而,变量firstName
是而不是可选;没有任何东西可以解开,导致Swift抱怨。
答
var firstName: String? = "John Appleseed"
if let name = firstName {
print ("Hello, \(name)")
}
add ?
使其成为可选项。
检查answer in this link知道在哪里使用可选的,什么是它实际上是
希望这将有助于:)
+4
请注意,如果这是实际的生产代码,因此,如果您在定义它时知道'firstName'的值,并且您知道它始终有一个值,那么它肯定应该是非可选的。 – Hamish
错误说明了这一切...你不能使用可选绑定('如果让...')与非可选。请将'String'更改为'String?',或完全取消可选绑定(取决于这是仅用于演示代码还是实际代码) – Hamish