我正在努力学习快速和闭合 . 我坚持这个例子 .
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
什么是(数字:国际) - >国际?这是一个功能吗?它在哪里定义? https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1
关键字“in”有什么作用?文档说使用“将参数和返回类型从主体中分离” . 我不确定我明白这一点 . 为什么“in”不用于将“let result = 3 * number”与“return result”分开 .
3 回答
闭包只是一个函数,参数在括号内移动,关键字
in
将参数与函数体分开 . 以下两个示例定义了等效函数:实际上你可以用完全相同的方式调用它们:
请注意第二个示例与第一个示例完全相同,仅在第一个示例中,参数
(number: Int) -> Int
在括号外,在第二个示例中,参数在括号内,后跟关键字in
.map
通过获取一个数组(在您的示例中为numbers
)并创建一个新数组,该数组是将闭包函数应用于numbers
中每个元素的结果 . 因此,如果numbers
是[1, 2, 3]
,则上面的示例将以1
开头 . 它将应用闭包函数,它将产生一个3
(因为它所做的只是将第一个数组中的元素乘以3) . 它为numbers
中的每个元素执行此操作,直到它生成一个新数组[3, 6, 9]
.如果您愿意,可以使用上述函数或上述闭包的名称调用
map
,或者在map
中明确写出来 . 以下所有示例都完全等效:注意,示例3与示例2相同,仅在示例3中,闭包在
map
内明确拼写,而在示例2中,闭包已分配给名为myClosure
的常量,并且常量已提供给map
.希望这会有所帮助 - 关闭很有趣,但令人困惑 .
您正在调用的函数将闭包作为其参数:
提供给函数的闭包应该在您调用的函数执行时接收参数 . 此参数在闭包中定义:
您现在可以在闭包的内容中使用该参数
闭包是自包含的功能块,可以在代码中传递和使用 .
Syntax:
实际场景:当用户想要应用过滤器并想要选择超过300的值时(在这种情况下),我们可以使用闭包来实现这一点 .
从下面的代码中你可以清楚地看到我们正在将closure传递给elements.map()函数 .
Closure:
(num:Int)
是参数 . 诠释?我们要返回Optional Integer Type .在
in
之后,我们可以编写你的逻辑 .您可以阅读有关closure here的更多信息 .