21
21
22
22
import UIKit
23
23
24
+ /**
25
+ SPDiffable: Wrapper of table cell provider.
26
+ */
24
27
@available ( iOS 13 . 0 , * )
25
- public enum SPDiffableTableCellProviders {
28
+ open class SPDiffableTableCellProvider {
26
29
27
- /**
28
- SPDiffable: Return cell providers, which process for project models cells.
29
- No need additional configure.
30
-
31
- For change style of cells requerid register new cell provider.
32
- */
33
- public static var `default` : [ SPDiffableTableCellProvider ] {
34
- return [ rowDetail, rowSubtitle, `switch`, stepper, customisable]
30
+ open var clouser : SPDiffableTableDataSource . CellProvider
31
+
32
+ public init ( clouser: @escaping SPDiffableTableDataSource . CellProvider ) {
33
+ self . clouser = clouser
34
+ }
35
+
36
+ // MARK: - Ready Use
37
+
38
+ public static var `default` : SPDiffableTableCellProvider {
39
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
40
+ let providers = [ rowDetail, rowSubtitle, `switch`, stepper, customisable]
41
+ for provider in providers {
42
+ if let cell = provider. clouser ( tableView, indexPath, item) {
43
+ return cell
44
+ }
45
+ }
46
+ return nil
47
+ }
35
48
}
36
49
37
50
public static var rowDetail : SPDiffableTableCellProvider {
38
- let cellProvider : SPDiffableTableCellProvider = { ( tableView, indexPath, item) -> UITableViewCell ? in
51
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
39
52
guard let item = item as? SPDiffableTableRow else { return nil }
40
53
let cell = tableView. dequeueReusableCell ( withIdentifier: SPDiffableTableViewCell . reuseIdentifier, for: indexPath) as! SPDiffableTableViewCell
41
54
cell. textLabel? . text = item. text
@@ -45,11 +58,10 @@ public enum SPDiffableTableCellProviders {
45
58
cell. selectionStyle = item. selectionStyle
46
59
return cell
47
60
}
48
- return cellProvider
49
61
}
50
62
51
63
public static var rowSubtitle : SPDiffableTableCellProvider {
52
- let cellProvider : SPDiffableTableCellProvider = { ( tableView, indexPath, item) -> UITableViewCell ? in
64
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
53
65
guard let item = item as? SPDiffableTableRowSubtitle else { return nil }
54
66
let cell = tableView. dequeueReusableCell ( withIdentifier: SPDiffableSubtitleTableViewCell . reuseIdentifier, for: indexPath) as! SPDiffableSubtitleTableViewCell
55
67
cell. textLabel? . text = item. text
@@ -59,11 +71,10 @@ public enum SPDiffableTableCellProviders {
59
71
cell. selectionStyle = item. selectionStyle
60
72
return cell
61
73
}
62
- return cellProvider
63
74
}
64
75
65
76
public static var `switch` : SPDiffableTableCellProvider {
66
- let cellProvider : SPDiffableTableCellProvider = { ( tableView, indexPath, item) -> UITableViewCell ? in
77
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
67
78
guard let item = item as? SPDiffableTableRowSwitch else { return nil }
68
79
let cell = tableView. dequeueReusableCell ( withIdentifier: SPDiffableTableViewCell . reuseIdentifier, for: indexPath) as! SPDiffableTableViewCell
69
80
cell. textLabel? . text = item. text
@@ -74,11 +85,10 @@ public enum SPDiffableTableCellProviders {
74
85
cell. selectionStyle = . none
75
86
return cell
76
87
}
77
- return cellProvider
78
88
}
79
89
80
90
public static var stepper : SPDiffableTableCellProvider {
81
- let cellProvider : SPDiffableTableCellProvider = { ( tableView, indexPath, item) -> UITableViewCell ? in
91
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
82
92
guard let item = item as? SPDiffableTableRowStepper else { return nil }
83
93
let cell = tableView. dequeueReusableCell ( withIdentifier: SPDiffableTableViewCell . reuseIdentifier, for: indexPath) as! SPDiffableTableViewCell
84
94
cell. textLabel? . text = item. text
@@ -92,11 +102,10 @@ public enum SPDiffableTableCellProviders {
92
102
cell. selectionStyle = . none
93
103
return cell
94
104
}
95
- return cellProvider
96
105
}
97
106
98
107
public static var customisable : SPDiffableTableCellProvider {
99
- let cellProvider : SPDiffableTableCellProvider = { ( tableView, indexPath, item) -> UITableViewCell ? in
108
+ return SPDiffableTableCellProvider ( ) { ( tableView, indexPath, item) -> UITableViewCell ? in
100
109
guard let item = item as? SPDiffableCustomTableRow else { return nil }
101
110
let cell = tableView. dequeueReusableCell ( withIdentifier: SPDiffableCustomTableViewCell . reuseIdentifier, for: indexPath) as! SPDiffableCustomTableViewCell
102
111
cell. textLabel? . text = item. text
@@ -108,6 +117,5 @@ public enum SPDiffableTableCellProviders {
108
117
cell. higlightStyle = item. higlightStyle
109
118
return cell
110
119
}
111
- return cellProvider
112
120
}
113
121
}
0 commit comments