Swift 2.0初始化嵌套字典不能像我预期的那样工作

Swift 2.0初始化嵌套字典不能像我预期的那样工作,第1张

概述我试图使用 swift 2.0将一些 JSON结构解析为内存映射 – 我一直在运行这个问题.它第一次发生时,我认为这只是我做过的一些奇怪的事情,但它只是因为同样的原因再次发生,所以很明显我得不到. 我已经创建了两个单元测试来演示.第一个(testFails)为字典赋值,然后使用嵌套结构的句柄构建子值.第二个(testWorks)总是取消引用顶级字典的完整路径并构建它.第二个版本总是有效,但第一个版 我试图使用 swift 2.0将一些 JSON结构解析为内存映射 – 我一直在运行这个问题.它第一次发生时,我认为这只是我做过的一些奇怪的事情,但它只是因为同样的原因再次发生,所以很明显我得不到.

我已经创建了两个单元测试来演示.第一个(testFails)为字典赋值,然后使用嵌套结构的句柄构建子值.第二个(testWorks)总是取消引用顶级字典的完整路径并构建它.第二个版本总是有效,但第一个版本永远不会.我能想到的唯一的事情是(1),字典正在复制对子地图(subMap)的引用,或者(2)正在发生与可选项有关的东西.

对我来说都没有意义,而XCode中的调试器糟透了,它没有显示结构的值.调试器说0键/对,但当我打印计数时,我得到一个值,所以这是没用的. E.G.,在testWorks中的XCTAssertEqual行上设置断点,调试器有时会说变量’map’包含0个键/值对,有时只显示任何内容 – 即使那里显然有一个键/值对.

在一个方面(新手)注意,我发现自己在这个非常“现代”的环境中使用print语句,因为XCode调试器失败很多 – 它向我显示没有数据或完全是外来的东西. E.G.,在Java中我可以检查不同变量的引用地址并清除代理/副本的时间,但我不能在XCode中这样做.

func testFails(){    var map = [String: [String: String]]();    var subMap = [String: String]();    map["map"] = subMap;    subMap["1"] = "2";    XCTAssertEqual(1,map.count);    XCTAssertEqual(1,map["map"]!.count);  // << Fails    XCTAssertEqual("2",map["map"]!["1"]);  // << Fails}func testWorks(){    var map = [String: [String: String]]();    map["map"] = [String: String]();    map["map"]!["1"] = "2";    XCTAssertEqual(1,map["map"]!.count);    XCTAssertEqual("2",map["map"]!["1"]);}
解决方法 Swift Collectiontypes(数组,字典等)不是对象,它们是结构.

所以当map [“map”] = subMap时; map将获取subMap中的所有信息并将其放在键“map”下,注意对subMap的引用不会放在键“map”下.

因此,当您稍后在键“1”下添加值时,您不会将其添加到map [“map”]下的值,而是仅将其添加到subMap.

那么当你尝试访问“map”值时,它将包含在你的情况下设置为“map”时所包含的subMap为空.

希望我没有混淆你,术语不是我最聪明的一面.

总结

以上是内存溢出为你收集整理的Swift 2.0初始化嵌套字典不能像我预期的那样工作全部内容,希望文章能够帮你解决Swift 2.0初始化嵌套字典不能像我预期的那样工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存