当前位置: 首页 > 面试题库 >

Swift:以递归方式遍历所有子视图以查找特定的类并追加到数组

柴宝
2023-03-14
问题内容

有一段时间的魔鬼试图解决这个问题。我在这里问了类似的问题:Swift:获取特定类型的所有子视图并添加到数组中

在执行此操作的同时,我意识到有很多子视图和子子视图,因此我需要一个从主UIView开始的功能,循环遍历所有子视图(及其子视图,直到没有剩余的子视图)并将其添加到一个自定义按钮类的数组,我将其命名为CheckCircle。

本质上,我想结束于CheckCircles数组,这些数组构成以编程方式添加到该视图的所有CheckCircles。

有任何想法吗?这就是我一直在努力的事情。它似乎没有将任何Checkcircles附加到数组:

    func getSubviewsOfView(v:UIView) -> [CheckCircle] {
        var circleArray = [CheckCircle]()
        // Get the subviews of the view

        var subviews = v.subviews

        if subviews.count == 0 {
            return circleArray
        }

        for subview : AnyObject in subviews{
  if let viewToAppend = subview as? CheckCircle {
        circleArray.append(viewToAppend as CheckCircle)
      }
            getSubviewsOfView(subview as! UIView)
        }
        return circleArray
    }

问题答案:

您的主要问题是,在调用时getSubviewsOfView(subview as! UIView)(在函数内递归地),您对结果不做任何事情。

您也可以删除count == 0检查,因为在这种情况下,for…in循环将被跳过。你也有很多不必要的演员

假设您希望获得一组平面CheckCircle实例,那么我认为对代码的这种修改应该有效:

func getSubviewsOfView(v:UIView) -> [CheckCircle] {
    var circleArray = [CheckCircle]()

    for subview in v.subviews as! [UIView] {
        circleArray += getSubviewsOfView(subview)

        if subview is CheckCircle {
            circleArray.append(subview as! CheckCircle)
        }
    }

    return circleArray
}


 类似资料:
  • 问题内容: 我想知道如何从本质上将下面的目标c代码转换为快速代码。 这将遍历我所需视图上的所有子视图,检查它们是否为文本字段,然后检查是否为空。 到目前为止,这里是我快速翻译的地方: 任何帮助将是巨大的! 问题答案: Swift 5和Swift 4:-一个非常简单的答案,您可以轻松理解:-您可以处理各种对象,例如UILable,UITextfields,UIButtons,UIView,UIIma

  • 问题内容: 这是我想要做的事情:-我需要一个函数,当将其作为参数传递时,ID(用于事物类别)将提供所有子类别,子子类别和子子子..etc 。-我在考虑使用递归函数,因为我不知道子类别及其子类别的数量,依此类推,这是到目前为止我一直在尝试的操作 如果我使用return而不是echo,我将不会得到相同的结果。我需要一些帮助以解决此问题或从头开始重写它 问题答案: 我很难弄清楚你的职能。我认为这会做您想

  • 我试图写一个递归函数来产生一个数组的所有排列。 它作为调用,应该会产生所有的排列,但这并不起作用。我该怎么修好它?

  • 问题内容: 如何使用pathlib递归遍历给定目录的所有子目录? 似乎只迭代给定目录的直接子级。 我知道这可以通过或使用,但是我想使用pathlib,因为我喜欢使用path对象。 问题答案: 您可以使用对象的方法:

  • 问题内容: 众所周知,我们可以使用循环遍历或。但是,我想这样迭代自己: 为了使之成为可能,必须支持哪些操作/协议? 问题答案: 假设您有一个类“ Cars”,希望使用for..in循环进行迭代: 最简单的方法是将AnyGenerator与以下类一起使用: 要尝试一个完整的工作示例,请添加上面的两个类,然后尝试像这样使用它们,并添加几个测试项: 就是这样,很简单。 更多信息:http://lilly

  • 问题内容: Python代码: h.xml代码: 代码输出 此处未选择是另一个孩子。那么,如何指示findall递归地遍历DOM树并收集所有三个元素? 问题答案: 报价, 仅查找带有标签的元素,这些标签是当前元素的直接子元素。 由于它只能找到直系孩子,因此我们需要递归地找到其他孩子,像这样 更好的是,使其成为生成器函数