我试图根据条件创建不同的字典。如果我只选择一个版本的字典,代码运行正常。
但是一旦我尝试在' if else'中创建字典。声明我得到一个警告,即从未使用过字典,随后在代码中使用未解析的标识符datadict'错误,好像根本没有创建字典。
我是斯威夫特的新手,所以很有可能它很简单,但我还没能弄清楚。
这有效:
let datadict: [String:Int] = [
"A":1,
"B":2,
"C":3,
"D":4,
"E":5]
这失败了:
var dicttype = 1 //set the value to determine which dictionary to use
if dicttype==1 {
let datadict: [String:Int] = [
"A":1,
"B":2,
"C":3,
"D":4,
"E":5]
} else {
let datadict: [String:Int] = [
"A":3,
"B":2,
"C":9,
"D":4,
"E":15]
}
答案 0 :(得分:2)
您的变量datadict
的范围限定在声明它的块(if
/ else
的块)。
要使其比该块的范围更长,您需要在更高的范围内声明,并在更窄的范围内定义:
let datadict: [String: Int]
if dicttype == 1 {
datadict = [
"A": 1,
"B": 2,
"C": 3,
"D": 4,
"E": 5,
]
} else {
datadict = [
"A": 3,
"B": 2,
"C": 9,
"D": 4,
"E": 15,
]
}
巧妙的是,Swift编译器强制执行明确的初始化:它保证所有变量在首次使用之前在所有可能的代码路径中初始化。
答案 1 :(得分:1)
这是范围的概念,您必须学习并习惯于任何形式的编程。 if
/ else
语句定义范围:您在if / else语句中创建的变量仅在该范围内可用。之后他们会被扔掉。您在函数内创建的变量在不同函数中不可用的原因相同。
在这种特殊情况下,您可以在范围外声明变量,并在范围内初始化:
let dataDict: [String: Int]
var dictType = 1
if dictType == 1 {
dataDict = [
...
]
}
else {
dataDict = [
...
]
}