feat: Improve recursive protocol

This commit is contained in:
Juanpe Catalán
2018-08-10 13:23:24 +02:00
parent e43b3f3750
commit 413867718e
+10 -19
View File
@@ -1,37 +1,28 @@
//
// HelperProtocols.swift
// SkeletonView-iOS
//
// Created by Juanpe Catalán on 06/11/2017.
// Copyright © 2017 SkeletonView. All rights reserved.
//
import UIKit
typealias VoidBlock = () -> Void
typealias RecursiveBlock<T> = (T) -> Void
protocol IterableElement {}
extension UIView: IterableElement {}
extension CALayer: IterableElement {}
//MARK: Recursive
protocol Recursive {
associatedtype Element
func recursiveSearch(inArray array:[Element], leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>)
associatedtype Element: IterableElement
func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>)
}
extension Recursive {
func recursiveSearch(inArray array:[Element], leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>) {
guard array.count > 0 else {
extension Array: Recursive where Element: IterableElement {
func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>) {
guard count > 0 else {
leafBlock()
return
}
array.forEach { recursiveBlock($0) }
forEach { recursiveBlock($0) }
}
}
extension UIView: Recursive {
typealias Element = UIView
}
extension CALayer: Recursive {
typealias Element = CALayer
}