NSDictionary:错误在展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】NSDictionary:错误在展开可选值时意外发现 nil【英文标题】:NSDictionary: error Unexpectedly found nil while unwrapping an Optional value 【发布时间】:2015-12-02 03:25:55 【问题描述】:我在操场上玩一个想法。这个想法 NSDictionaries 用作“保留”数据的一种方式。
我开始创建一个名为layer
的variable
类型[String:[String:String]]
。
所以,发生了错误。我一个小时试图解决,找不到错误原因发生。我是 Swift 新手。
var layers: [String:[String:String]]!
layers["key"] = ["layer":"layer"]
layers["key2"] = ["asd":"12312"]
print(layers)
有人可以帮我吗?或者告诉我如何获得我的 NSDictionaries 的最终结果?
【问题讨论】:
顺便说一下,这是一个 SwiftDictionary
,但它不是 NSDictionary
,如果您使用 import Foundation
、import UIKit
或 import Cocoa
,它是可用的类型。您应该尽可能使用 Swift 字典,因为 NSDictionary
本质上是 [NSObject: AnyObject]
类型,因此在从中检索值时必须进行更多类型转换。
【参考方案1】:
您已声明变量 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
的所有访问都是以安全方式完成的,可以正确处理 @987654331 时的情况@ 是 nil
。
【讨论】:
以上是关于NSDictionary:错误在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
prepareForSegue 出错“”在展开可选值时意外发现 nil“”