首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在期望值的函数中跳过返回值

如何在期望值的函数中跳过返回值
EN

Stack Overflow用户
提问于 2018-11-13 10:33:07
回答 2查看 558关注 0票数 3

这是我使用的函数:

代码语言:javascript
复制
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‘不兼容

如何在不返回任何值的情况下跳过循环并继续进行下一次检查?

EN

回答 2

Stack Overflow用户

发布于 2018-11-13 10:36:06

代码语言:javascript
复制
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 这里的内容。

票数 2
EN

Stack Overflow用户

发布于 2018-11-13 10:56:40

基于Aakash使用compactMap的正确答案,这是一个更快捷(更高效)的版本

  • x是一个常量,所以在闭包之外创建(一旦)。
  • TimeIntervalDouble的一个类型别名,Double(x)是冗余的。
  • (紧凑)映射data数组,而不是它的索引。
  • 避免不必要的桥型。
代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53279035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档