我正在读这篇关于高阶函数的文章
然后我开始玩弄它们并找到了这个:let someArray = [1, 2, 3, 4, 5]
let newArray = someArray.map {
print($0)
$0 * 2
}
print(a)
这会在newArray
删除print
函数或专门设置函数的返回类型时会起作用:
let a = someArray.map { number -> Int in
print(number)
return number * 2
}
print(a)
有任何解释吗?
答案 0 :(得分:2)
这是因为如果您在关闭中使用速记参数名称,则必须从第一行返回,即内联返回。
在你的第一个关闭中,你的第一行是print()
,它不会返回任何内容。
如果你喜欢这样:
let newArray = someArray.map {
$0 * 2
}
或者只是这个:
let newArray = someArray.map { $0 * 2 }
你会得到结果。
详细了解此here in developer docs。
<强>更新强>
如@hamish所示,可以使用速记参数进行多次计算,但是我们需要明确提及结果的数据类型以及return
语句:
let newArray: [Int] = someArray.map {
print($0)
return $0 * 2
}
答案 1 :(得分:1)
如果你不在一个应该返回一些东西的闭包中使用return
,那么就会返回第一个语句的结果。在这种情况下,()
函数返回的void(也就是空元组:print
)。
在地图关闭中调用print
之类的函数是不好的做法,因为它可能有副作用,应该避免使用。