20220214 iOS 일일 개발일지
===
[TOC]
###### tags: `develop`, `20220214`
- 설정 뷰 구성하기.
- 정보 관련 뷰
- 일반
- 로그인 정보
- 주소록
- 결제 정보 X
- 판매 정산 계좌 X
- 알림 X
- 로그아웃 ( API 연결 -> KeyChain에서 해당 AccessToken, RefreshToken 제거 후 첫 번째 탭으로 이동하도록 함.)
- 상품 뷰
- 찜 기능 구현
- 찜 모달 띄우기
- 하단 클릭 바 테두리 그림자 넣기
- 차트 뷰 구현 필요함.
### 수직 확장과 수평 확장에 대한 생각
###### tags: `opinion`
### 상위 클래스 상속을 활용한 수직 확장 vs 프로토콜을 활용한 수평 확장
뷰 내부 구성 요소가 많음에 따라 해당 뷰들을 나누는 노력을 했음.
코드를 활용해 뷰를 작성하는 과정에서 일관된 흐름을 가져가기 위한 시도를 함.
의미적으로도 일관된 면에서도 프로토콜의 활용이 더 의미가 있지 않을까 생각했다.
```swift=
class BaseView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
applyViewSettings()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension BaseView {
func buildHierarchy() { }
func setupConstraints() { }
func viewConfigure() { }
func applyViewSettings() {
buildHierarchy()
setupConstraints()
viewConfigure()
}
}
```
```swift=
protocol ViewConfiguration {
func buildHierarchy() { }
func setupConstraints() { }
func viewConfigure() { }
}
extenion ViewConfiguration {
func applyViewSettings() {
buildHierarchy()
setupConstraints()
viewConfigure()
}
}
class CustomView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
applyViewSettings()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension CustomView: ViewConfiguration {
func buildHierarchy() { }
func setupConstraints() { }
func viewConfigure() { }
}
```