我试图了解快速和关闭。 我坚持这个例子。
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"做?文档说使用"将参数和返回类型与正文分开#34;。我不确定我明白这一点。为什么没有""在"用于分离"让结果= 3 *数"来自"返回结果"。
答案 0 :(得分:32)
闭包只是一个函数,参数在括号内移动,关键字in
将参数与函数体分开。以下两个示例定义了等效函数:
func myFunc(number: Int) -> Int {
let result = 3 * number
return result
}
let myClosure = { (number: Int) -> Int in
let result = 3 * number
return result
}
你实际上可以用完全相同的方式调用它们:
let x = myFunc(2) // x == 6
let y = myClosure(2) // y == 6
注意第二个示例与第一个示例完全相同,仅在第一个示例中,参数(number: Int) -> Int
在括号之外,在第二个示例中,参数在括号内,后跟关键字in
。
map
通过获取数组(在您的示例中为numbers
)并创建一个新数组,该数组是将闭包函数应用于numbers
中每个元素的结果。因此,如果numbers
为[1, 2, 3]
,则上述示例将以1
开头。它将应用闭包函数,它将产生3
(因为它所做的只是将第一个数组中的元素乘以3)。它为numbers
中的每个元素执行此操作,直到它生成了一个新数组[3, 6, 9]
。
如果您愿意,可以使用上述函数或上述闭包的名称来调用map
,或者在map
内明确写出let numbers = [1, 2, 3]
// Example 1
let times3 = numbers.map(myFunc) // times3 == [3, 6, 9]
// Example 2
let timesThree = numbers.map(myClosure) // timesThree == [3, 6, 9]
// Example 3
let xThree = numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result // xThree == [3, 6, 9]
})
。以下所有示例都完全等效:
map
请注意,示例3与示例2相同,仅在示例3中,闭包在myClosure
内明确拼写,而在示例2中,闭包已分配给名为map
的常量,常量已提供给{{1}}。
希望这会有所帮助 - 关闭很有趣,但令人困惑。
答案 1 :(得分:1)
您正在调用的函数将闭包作为其参数:
numbers.map({...})
提供给函数的闭包在您调用的函数执行时期望接收参数。此参数在闭包中定义:
(number: Int) -> Int in
您现在可以使用中的参数闭包的内容
let result = 3 * number
return result
答案 2 :(得分:0)
闭包是一个独立的功能块,可以在代码中传递和使用。
语法:
error: forward reference extends over definition of value x
val x: Int = y + 1
^
实际场景:当用户想要应用过滤器并希望选择超过300的值时(在这种情况下),我们可以使用闭包来实现此目的。
{(parameterName: ParameterType) -> returnType in
//Statements
}
从下面的代码中你可以清楚地看到我们正在将闭包传递给elements.map()函数。
<强>关闭:强>
var elements: [Int] = [Int]() //Declaring Empty array
elements = [1001, 999, 555, 786, 988, 322, 433, 128, 233, 222, 201, 276, 133]
var filteredElements = elements.map({(num: Int) -> Int? in
return num > 300 ? num : nil
})
output:
[Optional(1001), Optional(999), Optional(555), Optional(786), Optional(988), Optional(322), Optional(433), nil, nil, nil, nil, nil, nil]
{(num: Int) -> Int? in
return num > 300 ? num : nil
}
是参数。
诠释?我们是否会返回可选的整数类型。
在(num:Int)
之后,我们可以编写您的逻辑。
您可以阅读有关关闭here的更多信息。