-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDeleveloper_ReadMe
90 lines (56 loc) · 3.56 KB
/
Deleveloper_ReadMe
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
신기술과 여태까지했던 개발과는 다른 방식으로 개발하자.
데이터 타입 관련된 소스 -> 구조체
프로토콜, 익스텐션, 제네릭 사용을 많이하자.
FlexLayout
PinLayout
view.pin.[EDGE | ANCHOR | RELATIVE]. [WIDTH | HEIGHT | SIZE]. [pinEdges ()]. [MARGINS]. [sizeToFit ()]
22.11.02 (수)
탭 바 컨트롤러 설정할 때 TabBarItem을 외부 VC에서 정의하는게 bad하다고 느껴져서 실제 들어가는 rootViewController에서 tabBarItem 정보를 갖고있게 하기 위해
UITabBarControllerDelegate를 만들었다.
TabBarController에서 Generic으로 [VC] 배열을 넘기면 세팅되게끔 하려고했는데,
func setTabBarItem<T>(viewController: [T]) where T: UIViewController & UITabBarItemControllerDelegate {}
이렇게 함수를 선언 후 호출할 때 [VC, VC] 가 먹지 않았다.
Array의 Element에는 Protocol이 들어갈 수 없는 것 같다. [VC]로 하면 잘 동작했는데, 인자가 여러개가 되는 순간 컴파일에러가 떴다.
아마 Array도 Generic으로 되어있어서? 타입 유추를 못하는 것 같다.
그래서 결국 Array<UIViewController & UITabBarItemControllerDelegate>로 [VC]를 만들어서 구현했다. Generic 결국 사용 안함..ㅋㅋ
개인적으로 지금 TabBarController 세팅 코드가 완전 맘에 드는건 아니지만, 그냥 UI 그리는게 아니고 어떻게든 프로토콜을 이용해서 구현했다는 점을 높이 사자..
22.11.20 (일)
ReactorKit을 이용해서 TableView 데이터를 받아와서 업데이트 시킬 때,
Reactor를 처음 넣을 때 UI가 그려지기 전에 state가 방출되서 pinLayout이 아예 깨지는듯한 현상이 있었다.
skip(1)을 하거나, VC를 Push한 후에 Reactor를 세팅해주면 발생되지 않았다.
22.11.22 (화)
ReactorKit과 UITableViewDataSource는 너무 안어울린다고 판단해서
처음엔 RxSwift만으로 TableView를 구성하려고 했다..
```swift
self.rx.storageData
.bind(to: self.tableView.rx.items(cellIdentifier: "MyStorageCell")) { (indexPath, data, cell) in
guard let cell = cell as? MyStorageCell else { return }
cell.reactor = MyStorageCellReactor()
cell.configure(storage: data)
}
.disposed(by: self.disposeBag)
```
요런식으로.
근데 이렇게 하면.. 데이터는 바인딩 예쁘게된다.
하지만? 내가 원하는 기능 중에는 Edit, +, move가 되야된다는건데…
canMoveAt 함수가 UITableViewDataSource에 있다.
결국엔 DataSource가 필요하다는 소리 ㅠㅠ
UITableViewDataSource를 채택하면 cellForRowAt은 무조건 정의해야한다 ㅠㅠ 흑흑
그래서 울며겨자먹기로 RxDataSource..해버렸다
아니나다를까 너무불편함..
정의하는것도 너무많고
그 중에 제일 이해안되는건
```swift
let dataSource = RxTableViewSectionedReloadDataSource<MyStorageSectionData> { dataSource, tableView, indexPath, item in
let cell = tableView.dequeueReusableCell(withIdentifier: "MyStorageCell", for: indexPath) as! MyStorageCell
cell.configure(storage: item)
cell.reactor = MyStorageCellReactor(quantity: item.quantity)
return cell
}
self.rx.storageSectionData
.bind(to: self.tableView.rx.items(dataSource: self.dataSource))
.disposed(by: self.disposeBag)
```
여기서 저 rx.storageSectionData는 배열로 들어가야한다는것이다.
내가 섹션을 1개만 한다고해서 저걸 배열로 안넣을 수가 없다.
이게 제일 불편하다.