Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Ribs
- Large File Storage
- 잡초가득블로그
- 클린아키텍쳐
- coordinateSpace
- RIBs Tutorial
- Git Large File Storage
- conflicting access to memory
- Dependency Rule
- ios
- iOS 버전 점유율
- Concurrent
- swiftdocs
- SWIFT
- memory safety
- RxCocoa
- Github file size
- Automatically manage signing
- Dispatch.main.sync
- 로버트마틴형
- App Signing
- rib
- UICoordinateSpace
- RxSwift
- windowScene
- iOS Target
- 대머리깃허브
- in-out
- 메모리 접근 충돌
- Apple Certificate
Archives
- Today
- Total
빙수왕의 개발일지
struct의 variable들을 array처럼 쓸 수는 없을까? 본문
문제상황: 나의 모든 금융 보유 리스트를 출력하려고 한다. (ex. 계좌, 카드, 보험 등..)
아래 토스 화면 처럼!
그래서 json을 임의로 상상해서 만들었음. 아래처럼 내려오지 않을까?
{
"accounts": [
{
"accountName": "신한 주거래 우대통장",
"amount": "3,391,392",
"unit": "원"
},
{
"accountName": "신한 첫급여 드림 적금",
"amount": "3,391,392",
"unit": "원"
},
{
"accountName": "한달애저금통",
"amount": "3,391,392",
"unit": "원"
},
{
"accountName": "개인형IRP",
"amount": "3,391,392",
"unit": "원"
}
],
"cards": [
{
"cardName": "하이마트Mobile-현대카드M",
"amount": "17,950",
"unit": "원"
}
]
}
그러면 TableView에서 뿌려줄 때.. 계좌 / 카드 별로 섹션을 나눠야 하기 때문에 아마 case문이 들어갈것이다. 대충 아래처럼...
하지만 "case 0은 accounts이고 case 1은 cards임"이 어떻게 보면 내맘대로 넣어버린거지 않은가?? 하드코딩처럼..
switch section {
case 0:
return list?.accounts.count ?? 0
case 1:
return list?.cards.count ?? 0
}
이게 싫은게 문제였다.
그래서일단 enum을 만들었다. case 0, 1이라는 숫자에 의미를 가질 수 있도록.
enum FinanceCategory: Int, CaseIterable {
case Account = 0
case Card
var title: String {
switch self {
case .Account:
return "계좌"
default:
return "카드"
}
}
}
그리고 테이블뷰에서는 아래처럼 case문을 없앨 수 있었다.
// MARK: - tableView
extension FirstViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return FinanceCategory.allCases.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return FinanceCategory(rawValue: section)?.title
}
하지만 두번째 문제.. 실제 json 데이터 내부에 접근할 때는???? 어떻게 해야함?? 결국은 case문을 써야만 하지 않을까?
그러니까 내가 하고싶었던거는
아래와 같은 json 데이터를 받는 struct에서
section 0 - accounts
section 1 - cards 를 의미있게 매핑하고 싶었다. (FinanceInfo struct의 인스턴스 변수들이 배열처럼 인덱스로 찾아졌으면 했다)
그래서 내가 찾은 그나마 최선의 방법은.. subscript이다.
그리고 테이블뷰에서는 아래처럼 section을 subscript인자로 넣어주면 배열처럼(?) 사용 가능하다.
'개발 > iOS' 카테고리의 다른 글
tabBarItem.value(forkey: "view")가 nil일 때 (0) | 2021.04.17 |
---|---|
Api에서 받아온 data를 예쁘게 출력하기 (0) | 2021.03.20 |
loaded the \"FirstViewController\" nib but the view outlet was not set (0) | 2021.03.01 |
StackView distribution 속성 정리 (0) | 2021.02.23 |
reusableCell의 force casting은 나쁜걸까 (0) | 2021.02.12 |