ios개발자를 위한 여정 - 8

박경현·2022년 6월 16일
0

저의 깃허브입니다!!

내 Github주소!!!

여기를 클릭하면 간략한(?) 나의 깃허브가 있다 ㅎㅎ


MyAsset이라는 자산 관리 앱의 첫 번째 화면을 만들고 있는데 역대급으로 어렵다...ㅋㅋ

SWIFTUI로만 만들고 있는 앱이다

화면 구성

1. TabView로 전체페이지를 관리해라!!

지금은 자산 페이지만 만들었지만 추천, 알림,설정 등도 이동가능하게 tabView로 전체를 감쌌다.

2. Navbar를 사용해서 윗부분 자연스럽게 만들기 및 다른 뷰로 이동 가능하게 하기!

맨 위에 '내 자산' 과 '+자산 추가' 부분은 Navbar안에 들어있는 item들이다.
대부분의 앱이 그러하듯 상단 부분은 직관적인 UI를 구성하였다. + 이동 편이하게

3. 그리드방식으로 각각의 이미지와 텍스트를 일정하게 정렬하자!!

enum AssetMenu: String, Identifiable, Decodable {
    //전역으로 지정하고 싶으면 static var, static let으로!!
    // enum은 비교할때 쓰면 편하다
    case creditScore
    case bankAccount
    case investment
    case loan
    case insurance
    case creditCard
    case cash
    case realEstate
    
    var id: String {
        return self.rawValue //enum이 RawRepresentable 프로토콜을 채택
        //type은 init?(rawValue:)로 인스턴스화 되었기 때문에 optional 입니다.
    }
    
    var systemImageName: String {
        switch self {
        case .creditScore:
            return "number.circle"
        case .bankAccount:
            return "banknote"
        case .investment:
            return "bitcoinsign.circle"
        case .loan:
            return "hand.wave"
        case .insurance:
            return "lock.shield"
        case .creditCard:
            return "creditcard"
        case .cash:
            return "dollarsign.circle"
        case .realEstate:
            return "house.fill"
        }
    }
    
    var title: String {
        switch self {
        case .creditScore:
            return "신용점수"
        case .bankAccount:
            return "계좌"
        case .investment:
            return "투자"
        case .loan:
            return "대출"
        case .insurance:
            return "보험"
        case .creditCard:
            return "카드"
        case .cash:
            return "현금영수증"
        case .realEstate:
            return "부동산"
        }
    }
}

각각의 Asset을 Enum으로 만들어 비교 후 적합한 이미지와 텍스트를 전달해 줬다.

오늘 클론코딩을 하면서 다시한번 복습한 내용은 Grid부분까지이다.

ForEach

솔직하게 그냥 반복해주는 녀석이라고만 생각했다.

그러다가 id: \.self를 적길래 이게 뭐지하고 찾아봤다가 ForEach를 끝까지 팠다...

  1. ForEach는 Random Access Colletion만 데이터 받기 가능!

    배열 등 인덱스를 가지는 녀석들만 가능!!
    인덱스를 가지기 때문에 시간복잡도는 O(1)이다. ->인덱스보고 바로찾기

  1. 번외로 문자열은 양방향 접근컬렉션 방식이다
    -> 문자열 처음부터 끝까지 찾기 때문에 시간 복잡도 O(N)이다.

  2. 문자열과 배열의 시간복잡도는 count 프로퍼티 속도도 마찬가지!!
    (전체 개수 세는거!!)

  3. ForEach문에서는 id가 필요!!!
    -> 그래서 ForEach가 따로 id 설정 안하면 내부애서 id갖게 해준다

    이런 id도 Hashable을 만족해야한다! -> Int, String, Float, Boolean 다 만족함

  4. Hashable이란 unique한 키를 말한다!!

    내가 만든 객체들도 비교 가능하게 만드는 애!
    Hash 값을 만들더라도 내부 값이 같으면 같은 결과가 나올 것이

  5. ForEach는 0..<9 같은 (open)Range만 가능!
    (close)Range인 0...10은 안되더라... 이거 충격!!

피드백

Why?라는 끊없는 질문에 계속해서 답을 찾아가는 과정이 개발자라는 직업으로서 필수 과정이라고 생각한다.

ForeEach 안을 계속 파고들면서 '이게 뭐지' 라는 물음에 답을 찾아냈다.

이 질문에 답을 찾는 시간이 1시간 조금 안되게 걸렸다...

우리가 무심코 쓰는 '이게 왜 필요하지? 이게 뭐지?' 라는 답을 내 스스로 만족할때까지 찾아보자!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글