Swift:创建if语句失败时创建的字典

时间:2017-12-27 20:50:45

标签: swift dictionary

我试图根据条件创建不同的字典。如果我只选择一个版本的字典,代码运行正常。

但是一旦我尝试在' 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]  

}

2 个答案:

答案 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 = [
    ...
    ]
}