-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFastAdapter.swift
More file actions
69 lines (66 loc) · 2.13 KB
/
Copy pathFastAdapter.swift
File metadata and controls
69 lines (66 loc) · 2.13 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
// FastAdapter.swift
// FastAdapter
//
// Created by Fabian Terhorst on 11.07.18.
// Copyright © 2018 everHome. All rights reserved.
//
public extension FastAdapter {
func with(listView: ListView) {
listView.setListViewDelegate(delegate: dataProvider)
listView.setListViewDataSource(dataSource: dataProvider)
self.listView = listView
}
}
public class FastAdapter<Itm: Item> {
public let backgroundLayoutQueue: OperationQueue
public var dataProvider: DataProvider<Itm> {
didSet {
dataProvider.fastAdapter = self
listView?.setListViewDelegate(delegate: dataProvider)
listView?.setListViewDataSource(dataSource: dataProvider)
}
}
public var typeInstanceCache: TypeInstanceCache<Itm> {
didSet {
typeInstanceCache.fastAdapter = self
}
}
public var measurer: Measurer<Itm> {
didSet {
measurer.fastAdapter = self
}
}
public var notifier: Notifier<Itm> {
didSet {
notifier.fastAdapter = self
}
}
public var listView: ListView? {
didSet {
typeInstanceCache.renew()
}
}
public var logger: ((String) -> ())? = nil
public let eventHooks = EventHooks<Itm>()
public var adapter: Adapter<Itm>? {
didSet {
adapter?.fastAdapter = self
}
}
public init(dataProvider: DataProvider<Itm> = DataProvider<Itm>(),
typeInstanceCache: TypeInstanceCache<Itm> = TypeInstanceCache<Itm>(),
measurer: Measurer<Itm> = Measurer<Itm>(),
notifier: Notifier<Itm> = BatchNotifier<Itm>(),
backgroundLayoutQueue: OperationQueue = DefaultLayoutQueue()) {
self.backgroundLayoutQueue = backgroundLayoutQueue
self.dataProvider = dataProvider
self.typeInstanceCache = typeInstanceCache
self.measurer = measurer
self.notifier = notifier
self.dataProvider.fastAdapter = self
self.typeInstanceCache.fastAdapter = self
self.measurer.fastAdapter = self
self.notifier.fastAdapter = self
}
}