如何在 Swift 中构建递归函数以返回字符串? [英] How can I build a recursive function in Swift to return a String?

查看:41
本文介绍了如何在 Swift 中构建递归函数以返回字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Node 类,定义如下.value: T 是一个 String

I have a Node class defined as follows. value: T is a String

class Node<T> {
    var value: T
    weak var parent: Node?
    var children = [Node<T>]()
    init(_ value: T) {
        self.value = value
    }
    func add(_ node: Node<T>) {
        children.append(node)
        node.parent = self
    }
}

我想构建一个函数来返回当前节点值和所有父值的字符串.理想情况下,该函数将在类中定义.例如,

I'd like to build a function to return a String of the current Node's value and all Parent values. Ideally, the function would be defined in the class. For example,

currentnode.listAllValues()
would return -> "/parent2value/parent1value/currentnodevalue"

到目前为止,以下函数使用一个简单的 print(),我也考虑过使用 inout 参数.

So far the following function works with a simple print(), and I've also considered using an inout parameter.

func listAllValues(node: Node<String>) {
    print(node.value)
    if node.parent?.value != nil {
        listAllValues(node: node.parent!)
    }
}

推荐答案

给你:

func desc(_ s:String? = nil) -> String {
    var me = String(describing:self.value)
    if let prev = s {
        me += "/" + prev
    }
    return self.parent?.desc(me) ?? me
}

示例:

let n = Node("hey")
n.add(Node("ho"))
n.children.first?.add(Node("nonny nonny no"))
let start = n.children.first!.children.first!
print(start.desc())

这篇关于如何在 Swift 中构建递归函数以返回字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆