Swift   发布时间:2022-04-29  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift 2.0初始化嵌套字典不能像我预期的那样工作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用 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初始化嵌套字典不能像我预期的那样工作所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。