2016-04-23 54 views
1
var firstName: String = "John Appleseed" 
if let name = firstName { 
    print ("Hello, \(name)") 
} 

字符串错误出现在第二行:初始化器有条件的结合必须有可选的类型,而不是“字符串”错误:初始值设定条件的结合必须有可选的类型,而不是“字符串”

如何决定是否使用可选或非可选变量?

+2

错误说明了这一切...你不能使用可选绑定('如果让...')与非可选。请将'String'更改为'String?',或完全取消可选绑定(取决于这是仅用于演示代码还是实际代码) – Hamish

回答

3

首先,让我们考虑if let结构的意思。当你写

if let name = firstName { 
    print ("Hello, \(name)") 
} 

你告诉斯威夫特要

  1. 尝试展开firstName
  2. 如果解缠的结果是成功的,分配展开到name
  3. 如果结果的结果的解包成功,打印"Hello, \(name)"

换句话说,这个构造用于处理可选变量的解包。然而,变量firstName而不是可选;没有任何东西可以解开,导致Swift抱怨。

2
var firstName: String? = "John Appleseed" 
if let name = firstName { 
print ("Hello, \(name)") 
} 

add ?使其成为可选项。

检查answer in this link知道在哪里使用可选的,什么是它实际上是

希望这将有助于:)

+4

请注意,如果这是实际的生产代码,因此,如果您在定义它时知道'firstName'的值,并且您知道它始终有一个值,那么它肯定应该是非可选的。 – Hamish

相关问题