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

标签 swift swift2 nsdictionary swift-playground

我在 Playground 中玩弄一个想法。这个想法被 NSDictionaries 用作“保存”数据的一种方式。

我开始创建一个名为 layervariable type [String:[String:String]]

所以,出错了。我花了一个小时试图解决,但找不到发生错误的原因。我是 Swift 的新手。

var layers: [String:[String:String]]!

layers["key"] = ["layer":"layer"]
layers["key2"] = ["asd":"12312"]

print(layers)

enter image description here

有人可以帮助我吗?或者告诉我如何获得 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 的情况。

关于swift - NSDictionary:错误在展开可选值时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034373/

相关文章:

ios - “正常”在 Swift 2 中明确不可用

ios - 查看 NSDictionary 键是否在另一个 NSArray 中

ios - 从字典的 NSMutableArray 获取字典

swift - 如何将 Swift XMLParser 与 span 样式标签一起使用

ios - 如何在 View 出现时以编程方式点击状态栏?

ios - CoreLocation 类的 Codable 扩展

ios - 以编程方式将 UISearchController 添加到 swift 2 中的 UITableView header

swift - 可以使用条件来确定泛型的类型吗?

json - 将复杂 JSON 中的每个值提取到 Swift 中的数组中

swift - 在 swift 中使用 SwiftyJson True 变为 false