0

使用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($0.x), labelSettings:labelSettings),
            y:ChartAxisValueFloat(CGFloat($0.y)), diameterScalar: $0.r, description: $0.description)
    }

错误

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

4

2 回答 2

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

于 2015-05-29T21:36:58.347 回答
0

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

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

  1. 在方法'map'之后找到的第一个打开的花括号之后添加行“(var arrayItem)-> ChartPointBubble in”。(我很确定您不必指定 arrayItem 的类型,因为它可以从数组中已有的项目中推断出来)
  2. 用“arrayItem”替换“$0”
  3. 返回您正在创建的新 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)
}
于 2015-05-29T21:51:10.313 回答