为 swift 中的 If else 块内的变量赋值 3
Assigning value to a variable inside an If else block in swift 3
这东西太基础了,我确定有人问过它,但我找不到它。
我正在 swift 3 个游乐场进行试验,我想 运行 此代码:
import UIKit
var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
print("This executed")
anotherVariable = 32
}
print(anotherVariable)
它无法 运行,我收到此错误:
Playground execution failed: error: chapter4.playground:5:7:
error: variable 'anotherVariable' used before being initialized
print(anotherVariable)
怎么了?为什么我给anotherVariable
赋值后不能使用它的值?
如果我注释掉最后一行 print(anotherVariable)
,
代码 运行s,输出打印为 This executed
.
编译器看到有一个路径 anotherVariable
没有被初始化(当 optionalVariable
是 nil
时)。如果例如,这可能会发生另一个线程将此可选变量设置为 nil
。它不会发生在您的代码中,但编译器无法知道这一点。在将 anotherVariable
传递给函数之前,您必须在某个时候对其进行初始化。
Swift中有一条铁律:任何变量在使用它的值之前必须先初始化。
行
var anotherVariable: Int
声明变量但不初始化它。
如果 optionalVariable
为 nil,anotherVariable
不会被初始化并会导致崩溃。编译器可以在编译时检测到并显示错误消息。
要么赋默认值,要么把声明行改成
var anotherVariable = 10 // or 0 or whatever
或添加 else
子句
var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
print("This executed")
anotherVariable = 32
} else {
anotherVariable = 10
}
print(anotherVariable)
您的变量声明为 Int
var anotherVariable: Int
问题是当您打印变量时它可能未初始化(当 optionalVariable
为 nil
时)。 Int
必须有一个值,编译器不会为您设置默认值,除非它是可选类型。任何类型或 class 在第一次使用之前都应该有一个值,这就是你在注释 print
行时没有错误的原因。
有两种选择可以解决这个问题。
通过在声明
处初始化,确保anotherVariable
在某个时候被初始化
var anotherVariable: Int = 0
或在 else
情况下这样做
if optionalVariable != nil{
print("This executed")
anotherVariable = 32
}
else {
anotherVariable = 0
}
或使 anotherVariable
可选(将其声明为 Int?
)
var anotherVariable: Int?
默认情况下是 nil
。这与
相同
var anotherVariable: Int? = nil
如果您来自 C,这是为了防止一些边缘情况,其中变量包含以前分配的值。
这东西太基础了,我确定有人问过它,但我找不到它。
我正在 swift 3 个游乐场进行试验,我想 运行 此代码:
import UIKit
var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
print("This executed")
anotherVariable = 32
}
print(anotherVariable)
它无法 运行,我收到此错误:
Playground execution failed: error: chapter4.playground:5:7:
error: variable 'anotherVariable' used before being initialized
print(anotherVariable)
怎么了?为什么我给anotherVariable
赋值后不能使用它的值?
如果我注释掉最后一行 print(anotherVariable)
,
代码 运行s,输出打印为 This executed
.
编译器看到有一个路径 anotherVariable
没有被初始化(当 optionalVariable
是 nil
时)。如果例如,这可能会发生另一个线程将此可选变量设置为 nil
。它不会发生在您的代码中,但编译器无法知道这一点。在将 anotherVariable
传递给函数之前,您必须在某个时候对其进行初始化。
Swift中有一条铁律:任何变量在使用它的值之前必须先初始化。
行
var anotherVariable: Int
声明变量但不初始化它。
如果 optionalVariable
为 nil,anotherVariable
不会被初始化并会导致崩溃。编译器可以在编译时检测到并显示错误消息。
要么赋默认值,要么把声明行改成
var anotherVariable = 10 // or 0 or whatever
或添加 else
子句
var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
print("This executed")
anotherVariable = 32
} else {
anotherVariable = 10
}
print(anotherVariable)
您的变量声明为 Int
var anotherVariable: Int
问题是当您打印变量时它可能未初始化(当 optionalVariable
为 nil
时)。 Int
必须有一个值,编译器不会为您设置默认值,除非它是可选类型。任何类型或 class 在第一次使用之前都应该有一个值,这就是你在注释 print
行时没有错误的原因。
有两种选择可以解决这个问题。
通过在声明
处初始化,确保anotherVariable
在某个时候被初始化var anotherVariable: Int = 0
或在
else
情况下这样做if optionalVariable != nil{ print("This executed") anotherVariable = 32 } else { anotherVariable = 0 }
或使
anotherVariable
可选(将其声明为Int?
)var anotherVariable: Int?
默认情况下是
相同nil
。这与var anotherVariable: Int? = nil
如果您来自 C,这是为了防止一些边缘情况,其中变量包含以前分配的值。