gpt4 book ai didi

ios - 找到第一个共享父节点,它可以工作,但是可以做得更多 Swift-y 吗?

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

代码做了我现在想要它做的事情,所以我问这个纯粹是为了学习一些东西。因为我一直想知道是否有一种更实用或更快速的方法来做到这一点。

目标是弄清楚是否 UIView oneViewUIView 的父级或子级anotherView ,或者说他们有共同的祖先。我不喜欢的一件事是我使用 var views: [UIView] = [view] ,有没有办法直接将其压缩为列表而不初始化 var ?或者我可能错过了任何其他改进?

private static func determineSharedNode(between oneView: UIView, and anotherView: UIView) throws -> UIView {
let oneViewStack = viewHierarchy(for: oneView)
let anotherViewStack = viewHierarchy(for: anotherView)
let sharedViews = oneViewStack.filter(anotherViewStack.contains)

guard let firstSharedView = sharedViews.first else {
throw ParentChildError.doNotShareNode
}

return firstSharedView
}

private static func viewHierarchy(for view: UIView) -> [UIView] {
var views: [UIView] = [view]

if let superview = view.superview {
views.append(contentsOf: viewHierarchy(for: superview))
}

return views
}

最佳答案

我已设法将其浓缩为以下内容:

func viewHierarchy(for view: UIView) -> [UIView] {
return [view] + (view.superview.map(viewHierarchy) ?? [])
}

我认为没有中间 var 会好很多

对其进行了更多编辑,因此我摆脱了匿名 $0

关于ios - 找到第一个共享父节点,它可以工作,但是可以做得更多 Swift-y 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843548/

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