这是我正在使用的功能:
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
}
}
这导致此错误:
无与返回类型'ChartDataEntry'不兼容
如何跳过循环而不返回任何值并继续进行下一个检查?
答案 0 :(得分:2)
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
here
答案 1 :(得分:0)
基于Aakash使用compactMap
的正确答案,这是一个 swiftier (效率更高)版本
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)
}