我在 Playground 中玩弄一个想法。这个想法被 NSDictionaries 用作“保存”数据的一种方式。
我开始创建一个名为 layer
的 variable
type [String:[String:String]]
。
所以,出错了。我花了一个小时试图解决,但找不到发生错误的原因。我是 Swift 的新手。
var layers: [String:[String:String]]!
layers["key"] = ["layer":"layer"]
layers["key2"] = ["asd":"12312"]
print(layers)
有人可以帮助我吗?或者告诉我如何获得 NSDictionaries 的最终结果?
最佳答案
您已经声明了变量 layers
的类型,但是您还没有为它分配存储空间。
试试这个:
var layers = [String:[String:String]]()
如果您坚持 layers
是一个隐式展开的可选,那么您可以这样初始化它:
var layers: [String:[String:String]]! = [:]
这将允许您稍后将 nil
分配给它,但这很危险,因为如果您在它为 nil
时尝试使用它,它会崩溃。这就是你崩溃的原因。
如果您希望它是可选的,您应该用 ?
声明它,以便它可以安全地展开:
var layers: [String:[String:String]]?
// Sometime later
layers = [:]
// use optional chaining to assign values, this safely does
// nothing if layers is nil
layers?["key"] = ["layer":"layer"]
layers?["key2"] = ["asd":"12312"]
// use optional binding to unwrap layers
if let unwrapped_layers = layers {
print(unwrapped_layers)
}
在 Playground 中尝试这个,然后尝试注释掉 layers = [:]
部分,您会发现它不会崩溃,因为所有对 layers
的访问以安全的方式完成,可以正确处理 layers
为 nil
的情况。
关于swift - NSDictionary:错误在展开可选值时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034373/