From 413867718ebd8fa8a599ae010c1b3aa2b34d2ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanpe=20Catala=CC=81n?= Date: Fri, 10 Aug 2018 13:23:24 +0200 Subject: [PATCH] feat: Improve recursive protocol --- Sources/Helpers/RecursiveProtocol.swift | 29 +++++++++---------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/Sources/Helpers/RecursiveProtocol.swift b/Sources/Helpers/RecursiveProtocol.swift index 9b77e63..29c73e9 100644 --- a/Sources/Helpers/RecursiveProtocol.swift +++ b/Sources/Helpers/RecursiveProtocol.swift @@ -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) -> Void +protocol IterableElement {} +extension UIView: IterableElement {} +extension CALayer: IterableElement {} + //MARK: Recursive protocol Recursive { - associatedtype Element - func recursiveSearch(inArray array:[Element], leafBlock: VoidBlock, recursiveBlock: RecursiveBlock) + associatedtype Element: IterableElement + func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock) } -extension Recursive { - func recursiveSearch(inArray array:[Element], leafBlock: VoidBlock, recursiveBlock: RecursiveBlock) { - guard array.count > 0 else { +extension Array: Recursive where Element: IterableElement { + func recursiveSearch(leafBlock: VoidBlock, recursiveBlock: RecursiveBlock) { + 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 -} -