gpt4 book ai didi

swift - 我不明白这个类中的参数(Swift)

转载 作者:行者123 更新时间:2023-11-30 10:25:22 25 4
gpt4 key购买 nike

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(value)

此代码示例中参数的闭包如何工作?

我尝试搜索来理解它,但我什至不知道搜索时使用什么关键字。

谢谢。

最佳答案

<强>1。声明

visit: (Element) -> Void

在上面的代码中,visit 被声明为 (Element)->Void 类型的闭包。无论调用何处,它都会接受 Element 类型(通用类型)的值。

<强>2。初始化

由于 traverseInOrder(visit:) 接受一个闭包,因此在调用此方法时会传递一个闭包。

这就是通常初始化闭包的方式,

tree.traverseInOrder { (value) in
print(value)
}

下面的代码与上面的代码相同,只是它的简写。

tree.traverseInOrder {
print($0)
}

<强>3。调用

 visit(value)

这就是通过在其中传递相关值来调用 visit closure 的方法。

关于swift - 我不明白这个类中的参数(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60087375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com