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

标签 ios swift uiview

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

目标是弄清楚是否 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/

相关文章:

iOS 以编程方式创建 View

iphone - 安排与外部 UIView 相关的 UIView subview

ios - 当键盘出现在 iOS (Cordova) 上时如何调整 Web View 的大小

ios - 有什么方法可以比 UIImagePNGRepresentation 更快地编码 PNG?

iphone - iOS:从另一个 View 将新单元格添加到表格 View

ios - 如何将分隔符后的两位数字转换为字符串?

ios - 访问 iPhone 的内置铃声

swift - 无法调用非函数类型的值 'ThreadConfined.Type' - Swift 4.0

javascript - 如何在 WKWebView 中将数据从 Javascript 传递到 Swift?

objective-c - iPhone iOS 如何通过旋转以编程方式截取屏幕截图?