在swift中将地图应用于JSON数组

时间:2015-05-29 21:21:33

标签: swift dictionary swifty-json

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

SwiftyJSON

问题

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

我的方法

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

错误

无法使用列表类型((_) - > _)

的参数调用地图

2 个答案:

答案 0 :(得分:1)

更新,而不是关闭。

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

答案 1 :(得分:0)

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

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

  1. 添加行"(var arrayItem) - > ChartPointBubble in"在方法' map'之后找到第一个打开的花括号后。 (我非常确定你不必指定arrayItem的类型,因为它可以从数组中已有的项目推断出来)
  2. 替换' $ 0'使用' arrayItem'
  3. 返回您正在创建的新ChartPointBubble
  4. 编辑: - 最终代码应如下所示

    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)
    }