这是我使用的函数:
let values = (0..<self.data.count).map { (i) -> ChartDataEntry in
let x = valueDate!.timeIntervalSince(startDate)
if let a = (self.data[i]["labelvalue"] as? NSString)?.doubleValue{
return ChartDataEntry(x: Double(x), y: a)
} else {
return nil
}
}这导致了这个错误:
0与返回类型'ChartDataEntry‘不兼容
如何在不返回任何值的情况下跳过循环并继续进行下一次检查?
发布于 2018-11-13 10:36:06
let values = (0..<self.data.count).compactMap { (i) -> ChartDataEntry? in
let x = valueDate!.timeIntervalSince(startDate)
if let a = (self.data[i]["labelvalue"] as? NSString)?.doubleValue{
return ChartDataEntry(x: Double(x), y: a)
}
return nil
}用这个替换您的代码。
compactMap -返回一个数组,该数组包含调用该序列中每个元素的给定转换的非零结果。
您可以阅读更多关于compactMap 这里的内容。
发布于 2018-11-13 10:56:40
基于Aakash使用compactMap的正确答案,这是一个更快捷(更高效)的版本
x是一个常量,所以在闭包之外创建(一旦)。TimeInterval是Double的一个类型别名,Double(x)是冗余的。data数组,而不是它的索引。let x = valueDate!.timeIntervalSince(startDate)
let values = self.data.compactMap { (item) -> ChartDataEntry? in
guard let d = item["labelvalue"] as? String, let a = Double(d) else { return nil }
return ChartDataEntry(x: x, y: a)
}https://stackoverflow.com/questions/53279035
复制相似问题