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

有一段时间的魔鬼试图解决这个问题。我在这里问了类似的问题: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

}

以上是 Swift:以递归方式遍历所有子视图以查找特定的类并追加到数组 的全部内容, 来源链接: utcz.com/qa/415103.html

回到顶部