Swift:语法解释 - 圆括号然后“在”

时间:2014-12-24 15:49:29

标签: ios swift

我遵循教程并与以下代码混淆:

 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是包含坐标属性的自定义类 - 纬度,经度等。

我理解该代码段的“整体”含义,但该行的语法让我感到困惑..

你可以提供解释吗?非常感谢!

1 个答案:

答案 0 :(得分:6)

在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,然后是函数体。与以func关键字开头的func不同,然后是参数和返回类型,后跟大括号内的函数体。

您永远不会看到in因为它可以被取消。有许多简写允许您完全跳过参数和返回类型(以及return关键字)。但有时您需要提供它们,然后您需要in关键字。

您可以在Apple Swift book中阅读有关闭包表达式的更多信息。您可以阅读有关函数和闭包基础知识的更多信息here