swift - 我不理解此类中的参数(Swift)
问题描述
public class BinaryNode<Element> {
public var value: Element
public var leftChild: BinaryNode?
public var rightChild: BinaryNode?
public init(value: Element) { self.value = value }
public func traverseInOrder(visit: (Element) -> Void) {
leftChild?.traverseInOrder(visit: visit)
visit(value) // <--- this code.
rightChild?.traverseInOrder(visit: visit)
}
}
var tree: BinaryNode<Int> {
let zero = BinaryNode(value: 0)
let one = BinaryNode(value: 1)
let five = BinaryNode(value: 5)
let seven = BinaryNode(value: 7)
let eight = BinaryNode(value: 8)
let nine = BinaryNode(value: 9)
seven.leftChild = one
one.leftChild = zero
one.rightChild = five
seven.rightChild = nine
nine.leftChild = eight
return seven // root node
}
// for print it
tree.traverseInOrder {
print($0)
}
// result:
// 0
// 1
// 5
// 7
// 8
// 9
我正在研究树数据结构和遍历它的算法。我在网上找到了一些代码,但我很奇怪我在函数中使用参数作为闭包。
访问(价值)
参数的这个闭包在这个代码示例中是如何工作的?
我试图搜索以了解它,但我什至不知道在搜索时使用什么关键字。
谢谢。
解决方案
一、声明
visit: (Element) -> Void
在上面的代码visit
中被声明为一个closure
类型(Element)->Void
。无论在何处调用,它都会接受类型Element
(泛型类型)的值。
2.初始化
由于traverseInOrder(visit:)
接受 a closure
,所以在调用此方法时传递一个。
这就是您closure
通常初始化的方式,
tree.traverseInOrder { (value) in
print(value)
}
下面的代码与上面的代码相同,只是它的简写。
tree.traverseInOrder {
print($0)
}
3. 打电话
visit(value)
这就是您visit
closure
通过在其中传递相关值来调用的方式。
推荐阅读
- python - 当我用 plotly 着色时,为什么我的箱形图变窄了?
- c# - 如何将特定枚举的女巫值传递给方法
- string - 我需要使用 powershell 脚本的 AssemblyInfo.cs 的前 3 位版本号
- flutter - 如何在颤动中按下按钮时设置状态并调用另一个函数
- php - MySQL查询过滤结果
- javascript - 检查 X 数组的所有值是否都在 Y 中
- laravel - 查询中的错误数据,Laravel
- react-native - 状态更改后反应原生不重新渲染
- python - 使用 Pandas 规范化 JSON 将路径附加到列
- python - 带有日期时间的 Python os.rename 不断保存多个同名文件