我跟随本教程,并与以下代码混淆:
let rectToDisplay = self.treasures.reduce(MKMapRectNull){
(mapRect: MKMapRect, treasure: Treasure) -> MKMapRect in
let treasurePointRect =
MKMapRect (origin: treasure.location.mapPoint, size: MKMapSize (width: 0, height: 0))
return MKMapRectUnion(mapRect, treasurePointRect)
}
实际上,我不仅理解这一行:
(mapRect: MKMapRect, treasure: Treasure) -> MKMapRect in
那是某种功能还是某种东西?输出是什么?我不太了解这种结构的含义(struct: struct, someClass: someClass) -> Struct in
那是什么逻辑?in是什么意思?
如果您想知道,treasure
是包含坐标属性(纬度,经度等)的自定义类。
我了解该代码段的“整体”含义,但是该行的语法使我有些困惑。
您能提供一个解释吗?非常感谢!
在Swift中,有两种方法来声明函数:带func
和带闭包表达式:
// this is a function that takes an Int and returns a String
func f(i: Int) -> String { return i.description }
f(1) // returns "1"
// this is also a function that takes an Int and returns a String
let g = { (i: Int) -> String in return i.description }
g(1) // returns "1"
后者是闭包表达式–内联定义新函数的快速方法。它们最常与带有函数的函数一起使用(例如map
,带有数组的函数和转换该数组的元素并在创建另一个数组的每个元素上运行该函数的函数)。
闭包表达式的语法是,它们在花括号内以参数和返回类型开头,然后是in
,然后是函数体。与with不同func
,它以func
关键字开头,然后是参数和返回类型,然后是大括号内的函数体。
您并不总是看到,in
因为可以忽略它。有许多速记可以让您完全跳过参数并返回类型(和return
关键字)。但是有时您需要给他们,然后您需要in
关键字。
您可以在Apple Swift书中阅读有关闭包表达式的更多信息。您可以在此处阅读有关函数和闭包基础的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句