2

我正在尝试遍历坐标数组以从每个坐标创建一个对象。坐标存储为元组(x,y,z,label)

private enum University 
{
     case Uni0,Uni1,Uni2, Uni3
}

let models: [(x: CGFloat, y:CGFloat, r:CGFloat, type: University)] = [
        (246.56, 138.98, 1,.Uni0), (218.33, 132.71, 1,.Uni0), (187.79, 127.48, 1, .Uni0), (150.63, 135.5, 1, .Uni0), (185.05, 152.57, 1, .Uni3), (213.15, 155.71, 1, .Uni1), (252.79, 158.85, 1, .Uni2), (315.77, 150.62, 1, .Uni0), (220.55, 149.57, 1, .Uni3)

产生错误的行

let xValues = models{$0.x}.map{ChartAxisValueInt($0.x,labelSettings: labelSettings)}

ChartAxisValueInt是 SwiftCharts 的一个类。构造函数接受一个Int和 的一个实例ChartLabelSettings

错误消息说 *map 不能使用类型为 ((_) -> _ ) 的参数列表调用。

我认为map是合适的,因为我想通过将函数应用于另一个系列的每个成员来生成一个序列。

更令人困惑的是,以下来自 SwiftCharts 的示例代码不会产生该错误:

let xValues = Array(stride(from: 0, through: 450, by: 50)).map {ChartAxisValueInt($0, labelSettings: labelSettings)}
4

1 回答 1

3

似乎只是map()缺少一个电话,

let xValues = models{ $0.x }.map{ ... }

应该

let xValues = models.map{ $0.x }.map{ ... }

此外,ChartAxisValueInt()Int第一个参数作为第一个参数,但您的 x 坐标是CGFloats。所以这会起作用:

let xValues = models
    .map { $0.x }
    .map { ChartAxisValueFloat($0, labelSettings: labelSettings) }

但是,正如@Ixx 正确注意到的那样,在单个映射中可以更有效地完成相同的操作:

let xValues = models
    .map { ChartAxisValueFloat($0.x, labelSettings: labelSettings) }
于 2015-05-24T21:02:04.187 回答