Skip to content
This repository was archived by the owner on Nov 19, 2023. It is now read-only.

Commit 98846a3

Browse files
committed
convenience methods
1 parent 9f7696d commit 98846a3

File tree

5 files changed

+52
-4
lines changed

5 files changed

+52
-4
lines changed

Sources/CollectionViewController.swift

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,42 @@ open class CollectionViewController: UIViewController {
1212

1313
@IBOutlet open weak var collectionView: UICollectionView!
1414

15+
// MARK: - source
16+
1517
open var source: CollectionViewSource? = nil {
1618
didSet {
1719
self.source?.register(itemsFor: self.collectionView)
18-
20+
1921
self.collectionView.dataSource = self.source
2022
self.collectionView.delegate = self.source
2123
}
2224
}
25+
26+
// MARK: - init
27+
28+
public init() {
29+
super.init(nibName: nil, bundle: nil)
30+
31+
self.initialize()
32+
}
33+
34+
required public init?(coder aDecoder: NSCoder) {
35+
super.init(coder: aDecoder)
36+
37+
self.initialize()
38+
}
39+
40+
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
41+
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
42+
43+
self.initialize()
44+
}
45+
46+
open func initialize() {
47+
// do nothing...
48+
}
49+
50+
// MARK: - view controller
2351

2452
open override func loadView() {
2553
super.loadView()

Sources/CollectionViewSection.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ open class CollectionViewSection {
3434
self.items.append(item)
3535
}
3636
}
37+

Sources/CollectionViewSource.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@ open class CollectionViewSource: NSObject {
3434
super.init()
3535
}
3636

37+
// MARK: - public helper functions
38+
public static func build(with grid: Grid = Grid(),
39+
sections: [[CollectionViewViewModelProtocol]],
40+
callback: CollectionViewCallback? = nil) -> CollectionViewSource {
41+
42+
let sections = sections.map { items in
43+
return CollectionViewSection(grid: grid, header: nil, footer: nil, items: items)
44+
}
45+
return CollectionViewSource(grid: grid, sections: sections, callback: callback)
46+
}
47+
3748
public func add(_ section: CollectionViewSection) {
3849
self.sections.append(section)
3950
}

Sources/CollectionViewViewModel.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ open class CollectionViewViewModel<Cell, Data>: CollectionViewViewModelProtocol
2323
public var data: Data
2424
public var cell: CollectionViewCell.Type { return Cell.self }
2525
public var value: Any { return self.data }
26+
public var callback: ((Data, IndexPath) -> Void)?
2627

27-
public init(_ data: Data) {
28+
public init(_ data: Data, callback: ((Data, IndexPath) -> Void)? = nil) {
2829
self.data = data
30+
self.callback = callback
2931
self.initialize()
3032
}
3133

@@ -49,7 +51,8 @@ open class CollectionViewViewModel<Cell, Data>: CollectionViewViewModelProtocol
4951
guard let data = data as? Data else {
5052
return
5153
}
52-
return self.callback(data: data, indexPath: indexPath)
54+
self.callback(data: data, indexPath: indexPath)
55+
self.callback?(data, indexPath)
5356
}
5457

5558
// MARK: - API

Sources/Grid.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,18 @@
99
import UIKit
1010

1111
public extension UIEdgeInsets {
12+
1213
public init(all value: CGFloat) {
1314
self.init(top: value, left: value, bottom: value, right: value)
1415
}
16+
17+
public init(horizontal: CGFloat, vertical: CGFloat) {
18+
self.init(top: vertical, left: horizontal, bottom: vertical, right: horizontal)
19+
}
1520
}
1621

1722
public extension CGFloat {
18-
23+
1924
public var evenRounded: CGFloat {
2025
var newValue = self.rounded(.towardZero)
2126
if newValue.truncatingRemainder(dividingBy: 2) == 1 {

0 commit comments

Comments
 (0)