* files reorganization (#432) * fix podspec * only include swift files * Fix broken readme paths (#433) * update links * fix french link * split skeleton debug to public and internal methods (#434) * Add build phase to execute SwiftLint (#435) * update tvOS tests * Refactor Extensions folder (#436) * Reorganize SkeletonAppearance (#437) * reorganize helpers and builders folders (#438) * Refactor flow and multilines (#439) * Reorganize collections folder (#440) * reorganize collections folder * update podspec * Refactor SkeletonView facade (#441) * reorganize collections folder * update podspec * refactor skeletonview facade * fix conflict * update iOS example * fix github workflows * update tvOS example project build settings
27 lines
707 B
Swift
27 lines
707 B
Swift
// 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: IterableElement
|
|
func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>)
|
|
}
|
|
|
|
extension Array: Recursive where Element: IterableElement {
|
|
func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock<Element>) {
|
|
guard !isEmpty else {
|
|
leafBlock()
|
|
return
|
|
}
|
|
forEach { recursiveBlock($0) }
|
|
}
|
|
}
|