NSDictionary:错误在展开可选值时意外发现 nil
NSDictionary: error Unexpectedly found nil while unwrapping an Optional value
我在 Playground 上玩弄一个想法。这个想法 NSDictionaries 用作 "keep" 数据的一种方式。
我开始创建一个名为 layer
的 variable
类型 [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
的情况。
我在 Playground 上玩弄一个想法。这个想法 NSDictionaries 用作 "keep" 数据的一种方式。
我开始创建一个名为 layer
的 variable
类型 [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
的情况。