-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNavigationItem.swift
35 lines (28 loc) · 1014 Bytes
/
NavigationItem.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//
// NavigationItem.swift
// SwiftUITest
//
// Created by Dariusz Grzeszczak on 01/03/2021.
// Copyright © 2021 Dariusz Grzeszczak. All rights reserved.
//
import SwiftUI
public protocol NavigationItem {
static var viewFactory: ViewFactory { get }
static var allItems: [NavigationItem] { get }
func isEqual(to: NavigationItem) -> Bool
func isEqualType(to: NavigationItem) -> Bool
func isType<T>(of: T.Type) -> Bool
}
extension NavigationItem {
public func isEqualType(to item: NavigationItem) -> Bool { type(of: self) == type(of: item) }
public func isType<T>(of: T.Type) -> Bool { type(of: self) == T.self }
}
extension NavigationItem where Self: CaseIterable {
public static var allItems: [NavigationItem] { allCases.map { $0 } }
}
extension NavigationItem where Self: Equatable {
public func isEqual(to item: NavigationItem) -> Bool {
(item as? Self) == self
}
}
public typealias CaseIterableNavigationItem = NavigationItem & CaseIterable & Hashable