如何解决Swift中“无法推断复杂闭包返回类型”的编译错误?
解决Swift中「Unable to infer complex closure return type」错误
这个错误是因为Swift的类型推断器在处理包含多语句的闭包时,无法自动确定返回类型。针对你的代码,有两种简单的解决方式:
方法1:显式指定闭包的返回类型
在map的闭包中明确标注返回类型为CGPoint,帮助编译器完成推断:
let points = valuePoints.map { -> CGPoint in let x = bounds.width / CGFloat(valuePoints.count - 1) * $0.x let y = bounds.height - $0.y * chartHeight return CGPoint(x: x, y: y) }
方法2:简化闭包为单表达式返回
将闭包内的变量声明和返回语句合并,直接返回CGPoint实例,让类型推断器更容易识别返回类型:
let points = valuePoints.map { CGPoint( x: bounds.width / CGFloat(valuePoints.count - 1) * $0.x, y: bounds.height - $0.y * chartHeight ) }
补充说明
原代码中闭包包含两个局部变量声明和一个返回语句,这种多语句结构会让Swift的类型推断器难以直接确定闭包的返回类型。通过显式标注返回类型或者简化为单表达式返回,都能解决这个推断失败的问题。
内容的提问来源于stack exchange,提问作者AlexTok6o
相关产品推荐
相关产品推荐

