将映射应用于 swift 中的 JSON 数组

Apply map to JSON array in swift

使用 SwiftyJSON 我加载了具有以下结构的 JSON 数组。

 [
  {
  "x": 2,
  "y": 2,
  "r": 100,
  "description": {"name":"bob","institution":"NYU","technologies":[]}
  },
  {
  "x": 4,
  "y": 4,
  "r": 200,
  "description": {"name":"bob","institution":"NYU","technologies":[]}  },...
]

问题

我想从这个数组中的每个元素创建一个对象。

我的做法

    let chartPoints: [ChartPointBubble] = json.array.map{
        ChartPointBubble(x: ChartAxisValueFloat(CGFloat([=13=].x), labelSettings:labelSettings),
            y:ChartAxisValueFloat(CGFloat([=13=].y)), diameterScalar: [=13=].r, description: [=13=].description)
    }

错误

无法使用列表类型 ((_) -> _) 的参数调用映射

已更新,未关闭。

var chartPoints = [ChartPointBubble]()
for (index: String, subJson: JSON) in json {
   let pointBubble = ChartPointBubble(
        x: ChartAxisValueFloat(CGFloat(subJson.x.int),  
        labelSettings:labelSettings),
        y:ChartAxisValueFloat(CGFloat(subJson.y.int)), 
        diameterScalar: subJson.r.int, 
        description: subJson.description)

    chartPoints.append(pointBubble)
}

编辑: 我看了一下文档。认为最好的方法是循环它。 另外,不确定您的类型:ChartAxisValueFloat.description.

错误指出您正在将 ()->() 类型的闭包传递到数组的 'map' 方法中。在这种情况下,map 方法需要接收类型为 (whateverTypeIsAlreadyInTheArray) -> (ChartPointBubble) 的参数。

您可以通过以下方式解决此问题:

  1. 在方法 'map' 之后找到的第一个左大括号后立即添加行“(var arrayItem) -> ChartPointBubble in”。 (我很确定您不必指定 arrayItem 的类型,因为它可以从数组中已有的项目中推断出来)
  2. 用 'arrayItem'
  3. 替换“$0”
  4. 正在返回您正在创建的新 ChartPointBubble

编辑:- 最终代码应如下所示

let chartPoints: [ChartPointBubble] = json.array.map{
    (var arrayItem) -> ChartPointBubble in
        return ChartPointBubble(
            x: ChartAxisValueFloat(CGFloat(arrayItem.x),  
            labelSettings:labelSettings),
            y:ChartAxisValueFloat(CGFloat(arrayItem.y)), 
            diameterScalar: object.r, 
            description: object.description)
}