ios - 使用 map() 从字典数组(即 JSON 数组)初始化数组内联

标签 ios swift initialization

我的类可以从 JSON 字典中初始化

class ChildObject {
    required init?(fromDictionary dictionary: [String:Any]) { //init... }
}

现在我得到了一系列这样的字典:

// objectDictionaries = [[String:Any]]

现在我想使用 map 初始化我的类的数组。我正在另一个类中初始化一个数组。

 class ParentObject {
      var children: [ChildObject]

      required init?(fromDictionary aDictionary: [String:Any]) {
            guard let childDictionaries = aDictionary["children"] as? [[String:Any]],
               let children = childDictionaries.map { ChildObject(fromDictionary: $0) }
               else { return nil }
            self.children = children
      }

 }

但这不能编译---谁能告诉我正确的语法?我尝试了 forEach 但这也没有用。

在 Playground 上我得到

  • 在 guard 之后期望其他
  • 匿名闭包参数不包含在 关闭
  • 预期的表达方式
  • 未使用的大括号语句 block 关闭

最佳答案

map 不返回可选项,所以 let children = childDictionaries.map { ChildObject(fromDictionary: $0) } 不能在你的保护子句中。

另一方面,ChildObject(fromDictionary: $0) 确实返回一个可选的,这是 map 不支持的。

您可以使用flatMap,这样无法初始化的值将被忽略:

class ParentObject {
    let children: [ChildObject]

    required init?(fromDictionary aDictionary: [String:Any]) {
        guard let childDictionaries = aDictionary["children"] as? [[String:Any]],
        else { return nil }

        self.children = childDictionaries.flatMap { ChildObject(fromDictionary: $0) }

    }
}

如果必须正确初始化所有子项,您也可以返回 nil:

    required init?(fromDictionary aDictionary: [String:Any]) {
        guard let childDictionaries = aDictionary["children"] as? [[String:Any]]
        else { return nil }

        let children = childDictionaries.flatMap { ChildObject(fromDictionary: $0) }

        guard children.count == childDictionaries.count else { return nil }

        self.children = children
    }

关于ios - 使用 map() 从字典数组(即 JSON 数组)初始化数组内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992985/

相关文章:

swift - Swift 2 方向步骤循环的语法

java - 如何在 Struts 2 中使用 DispatcherListener

c++ - 这是初始化我的图书馆的合理方式吗?

ios - 使用相机的图像选择器未使用相机图像

ios - 创建一个自定义的可滚动 Collection View ,模仿 Swift 中 UITableView 的行为

ios - 如何使用 Swift 对字典数据进行分组

ios - 一起使用 XCUI 测试和 XC 测试

ios - 当 UITextfield 更改时禁用键盘

ios - 如何区分 TableView 中两个 TableView 单元格之间的差距?

iphone - 如何在 iPhone 上初始化 NSObject 的子类?