Ios 找到第一个共享的parentnode,它可以工作,但可以做得更快吗?
代码做了我现在想要它做的事情,所以我问这个问题纯粹是为了学习一些东西。因为我一直在想是否有一种更实用或快捷的方法来做这件事 目标是确定Ios 找到第一个共享的parentnode,它可以工作,但可以做得更快吗?,ios,swift,uiview,Ios,Swift,Uiview,代码做了我现在想要它做的事情,所以我问这个问题纯粹是为了学习一些东西。因为我一直在想是否有一种更实用或快捷的方法来做这件事 目标是确定UIViewoneView是否是UIView另一个视图的父视图或子视图,或者它们是否共享一个共同的祖先。我不喜欢的一件事是我使用了var视图:[UIView]=[view],难道没有一种方法可以直接将它压缩成一个列表而不初始化var?或者我可能错过的任何其他改进 private static func determineSharedNode(between one
UIView
oneView
是否是UIView
另一个视图的父视图或子视图,或者它们是否共享一个共同的祖先。我不喜欢的一件事是我使用了var视图:[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
代码评论可以发布在