NSDictionary:错误在展开可选值时意外发现 nil

NSDictionary: error Unexpectedly found nil while unwrapping an Optional value

我在 Playground 上玩弄一个想法。这个想法 NSDictionaries 用作 "keep" 数据的一种方式。

我开始创建一个名为 layervariable 类型 [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 的所有访问都是以安全的方式正确完成的处理 layersnil 的情况。