NSDictionary:error在解包Optional值时意外发现nil

时间:2015-12-02 03:25:55

标签: swift swift2 nsdictionary swift-playground

我在游乐场玩了一个想法。这个想法NSDictionaries用作“保持”数据的方式。

我开始创建名为variable类型layer的{​​{1}}。

因此,发生了错误。我是一个小时试图解决,并找不到错误的原因发生。我是Swift的新手。

[String:[String:String]]

enter image description here

有人可以帮助我吗?或者告诉我如何才能获得NSDictionaries的最终结果?

1 个答案:

答案 0 :(得分:2)

您已声明变量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时处理此案例。