将映射应用于 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) 的参数。
您可以通过以下方式解决此问题:
- 在方法 'map' 之后找到的第一个左大括号后立即添加行“(var arrayItem) -> ChartPointBubble in”。 (我很确定您不必指定 arrayItem 的类型,因为它可以从数组中已有的项目中推断出来)
- 用 'arrayItem'
替换“$0”
- 正在返回您正在创建的新 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)
}
使用 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) 的参数。
您可以通过以下方式解决此问题:
- 在方法 'map' 之后找到的第一个左大括号后立即添加行“(var arrayItem) -> ChartPointBubble in”。 (我很确定您不必指定 arrayItem 的类型,因为它可以从数组中已有的项目中推断出来)
- 用 'arrayItem' 替换“$0”
- 正在返回您正在创建的新 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)
}