2015-11-23 24 views
0

我想将数组数值数据与列标签关联起来,所以我想用一个将字符串映射到浮点数组的字典进行建模。我试图通过用空数组初始化键值来填充字典,但我一直在获取可选数组。下面是一个例子,在Swift中使用非可选的空数组初始化字典

var labels = [ "pine", "elm", "palm" ] 
var dframe = [String:[Float]]() 
for label in labels { 
    dframe[label] = [Float]() 
} 
print(dframe.dynamicType) // --> Dictionary<String, Array<Float>> 
print(dframe["pine"].dynamicType) // --> Optional<Array<Float>> 

我感到困惑为什么在for循环的初始化[Float]()产生一个可选的阵列。如果我在for循环中说[Float]()!,那么我得到一个错误,说我“无法强制展开非可选类型的值[Float]'”。有任何想法吗?我只想要一个简单的,非可选的字符串映射到浮点数组。我正在使用XCode 7.1.1和Swift 2.1。谢谢!

回答

1

当你访问一个字典,:

let x = dframe["pine"] 

编译器不知道如果你传递一个有效的密钥到字典中,如果你没有,它将返回零。可选部分不在数组初始化中,而是在字典的值搜索中。

+1

现在有道理,谢谢!我知道这种行为必须有合理的解释。 – cjohnson318