// // UnreadCountProtocol.swift // Evergreen // // Created by Brent Simmons on 4/8/16. // Copyright © 2016 Ranchero Software, LLC. All rights reserved. // import Foundation public extension Notification.Name { public static let UnreadCountDidChange = Notification.Name(rawValue: "UnreadCountDidChange") } public protocol UnreadCountProvider { var unreadCount: Int { get } func postUnreadCountDidChangeNotification() func calculateUnreadCount(_ children: T) -> Int } public extension UnreadCountProvider { public func postUnreadCountDidChangeNotification() { NotificationCenter.default.post(name: .UnreadCountDidChange, object: self, userInfo: nil) } public func calculateUnreadCount(_ children: T) -> Int { let updatedUnreadCount = children.reduce(0) { (result, oneChild) -> Int in if let oneUnreadCountProvider = oneChild as? UnreadCountProvider { return result + oneUnreadCountProvider.unreadCount } return result } return updatedUnreadCount } }