[英]Swift: Function syntax with closure and type alias
我不了解此代码片段末尾的函数循环的语法(来自我正在学习的课程)。 成员是否充当 arrayClosure 使用的字符串数组的占位符? 如果是这种情况,我可以看到 name 将如何成为该数组中每个值的占位符。 如果没有,我不知道如何在最后阅读 activeMembers 的执行。
var partyMembers = ["Harrison", "Steven", "Bob the Noob"]
typealias AttackTuple = (name: String, damage: Int, rechargeable: Bool)
var sunStrike: AttackTuple = ("Rainbow Burst", 1000, false)
func levelUpAttack(baseAttack: AttackTuple) -> AttackTuple {
let increasedAttack: AttackTuple = (baseAttack.name, baseAttack.damage + 10, true)
return increasedAttack
}
var poweredAttack = levelUpAttack(baseAttack: sunStrike)
func activeMembers(completion: arrayClosure) {
completion(partyMembers)
}
//I don't understand what name is referencing here
activeMembers { (members) in
for name in members {
print("\(name) is active")
}
}
感谢您的洞察力,谢谢!
这段代码:
activeMembers { (members) in
for name in members {
print("\(name) is active")
}
}
是对activeMembers
(completion:)` 的调用。 完全脱糖后,它看起来像这样:
activeMembers(completion: { (members: [Member]) -> Void in
for name in members {
print("\(name) is active")
}
})
由于您没有给我们arrayClosure
类型别名的定义(它应该像其他类型名称一样大写,顺便说一句, ArrayClosure
),我不得不假设members
具有[Member]
类型。
闭包(从{ }
开始的代码)只是一个值,该值作为参数传递给activeMembers
的completion
参数。 activeMembers
函数的实现然后采用completion
闭包并调用它。 它调用它,将partyMembers
值作为其唯一参数的参数。
由于completion
指的是包含 for 循环的闭包,因此调用它将运行闭包内的代码。 partyMembers
参数现在是members
参数的值,然后循环并打印。
您可以通过跟踪正在发生的事情来更好地理解这一点:
var partyMembers = ["Harrison", "Steven", "Bob the Noob"]
typealias Member = String
typealias arrayClosure = ([Member]) -> Void
func activeMembers(completion: arrayClosure) {
print("About to call completion")
print("The value of partyMembers is: \(partyMembers)")
completion(partyMembers)
print("About to return from activeMembers(completion:)")
}
print("1. About to create closure")
let closure: arrayClosure = { (members: [Member]) -> Void in
print("4. Entered closure, about to loop over the members.")
print("5. The value of the members parameter is: \(members)")
for name in members {
print("\(name) is active")
}
print("6. Finished looping")
print("7. About to return from the closure")
}
print("2. Closure created")
print("3. About to call activeMembers(completion:)")
activeMembers(completion: closure)
print("8. Finished call to activeMembers(completion:)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.