【问题标题】:Swift nested dictionary with nilSwift 嵌套字典与 nil
【发布时间】:2015-10-04 05:22:49
【问题描述】:

如何在嵌套 Swift 字典中使用 nil?

var d: [String: AnyObject?] = [
    "name": "Rodrigo",
    "number": 1,
    "nil": nil,
    "more": [
        "a": 1,
        "b": 2,
        "nil": nil
    ]
]

第二个nil(在"more" 内)给了我错误Type of expression is ambiguous without more context

【问题讨论】:

    标签: swift dictionary


    【解决方案1】:

    您在这里遇到的问题是 Swift 的 Dictionary 是一种值类型,因此不会自动符合 AnyObject。编译器试图在这里帮助您,并过渡到NSDictionary,它一个AnyObject,但不幸的是NSDictionary 不能保存nil 值,所以你出局了运气。

    在我看来,你有几个选择:

    1. 采用标准的 Objective-C 路径并在嵌套数组中使用 NSNull() 而不是 nil
    2. 重新考虑数据结构。也许您可以构建一个struct PersonData,而不是使用字符串键的嵌套字典,它包含您在类型化属性(包括选项)中需要的所有信息。您可能会发现这种方法比这种方法效果更好。

    【讨论】:

    • 那么基本上没有办法了? =/ 我想要的只是通过整个应用程序中的一系列更新来构建这个字典,并且(假设每 5 秒)把这个字典转换成 JSON 并通过网络发送它来更新我的服务器中的某些内容。 5 秒通知器不需要知道它将通过网络发送哪些数据,它只知道它有点像 JSON(即字典)。
    • 我可以使用空字符串而不是 nil,但这在语义上是错误的,因为假设我的字典中有一个键是“user”,而该用户可以是 ["name" : "R", "age": 1] 或无。
    • @RodrigoRuiz:请注意,NSJSONSerialization 会将 NSNull() 转换为 JSON null,因此这可能是一个不错的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多