먼저 내가 구현하려고 하는 카테고리뷰는 다음과 같은 식의 연락처 화면이다.

https://gigas-blog.tistory.com/46

 

Swift 4 TableView Section

iPhone의 연락처 앱처럼 구분을 하여 목록을 보여주고 싶을 때가 있습니다. 블로그나 유튜브를 찾아봐도 TableView의 Section 구분만 나오는게 아닌 특정 기능까지 포함해서 나오기에 복잡해서 어려움

gigas-blog.tistory.com

구현해야 할것들

- 알파벳순 정렬 / 섹션 구분

- 없는 알파벳 섹션은 안보이도록

- 스크롤 하면서 알파벳 인덱스 쉽게 찾을 수 있도록?

- 들어가는 컨텐츠가 많다보니까 데이터 관리를 편하게 해야할듯

이러한 구현 목록을 보니, 우선 리스트를 만들면서 시작해야 할 것 같다.

그러나, 목록이 72개, 섹션까지 합치면 84개에 달하니, 리스트를 동적으로 사용해야 할 것 같다.

 

1. 첫번째 시도

https://medium.com/ivymobility-developers/creating-simple-tableview-in-swiftui-1f9e8e464782

 

Creating Simple TableView in SwiftUI

Static Lists and Dynamic Lists

medium.com

여기에서 마지막에 나오는 방식처럼 구조체를 만들고 배열 기반 리스트를 사용하려고 한다.

우선 섹션만 나타나는 리스트를 만들어보자.

//
//  ContentView.swift
//  SwiftDictionary
//
//  Created by Tempnixk on 2022/04/28.
//

import SwiftUI

struct Section: Identifiable {
  let id    : Int
  let name  : String
  let size  : String
}

var sectionList = [
    Section(id: 0, name: "Collection Types", size: "4 bytes"),
    Section(id: 1, name: "Conditional Statements", size: "1 byte"),
    Section(id: 2, name: "Data", size: "4 bytes"),

    Section(id: 3, name: "Enum", size: "4 bytes"),
    Section(id: 4, name: "Function", size: "8 bytes"),
    Section(id: 5, name: "Loops", size: "8 bytes"),
    Section(id: 6, name: "Methods", size: "8 bytes"),
    Section(id: 7, name: "Operations", size: "8 bytes"),
    Section(id: 8, name: "Optional", size: "8 bytes"),
    Section(id: 9, name: "Properties", size: "8 bytes"),
    Section(id: 10, name: "Structure / Classes", size: "8 bytes"),
    Section(id: 11, name: "Type", size: "8 bytes"),
    Section(id: 12, name: "Double", size: "8 bytes"),
  ]

struct ContentView: View {
    var body: some View {
        List(sectionList) { Section in
          HStack {
            Text(Section.name)
            Text(Section.size)
          }
        }
    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

다 만들고 나니 섹션 부분은 헤더? 라는 것으로 대체할 수 있다고 한다. 즉, 컨텐츠 리스트만 만들고 나중에 작업하는게 가능한 것이었다.

JSON 파일 통해서 리스트 구현? 한번 해봐야겠다.

 
사전 앱 만들기를 주제로 프로젝트 시작하려고 한다.
 
스케치로 만든 이번 프로젝트의 Hi-fi 프로토타입이다.
 
 

Sketch

Sketch

www.sketch.com

구현해야할 목록은 다음과 같다.

카테고리뷰

1. 서치바

2. 리스트

3. 스크롤뷰

4. 음성인식(?)

딕트뷰

1. 북마크 기능

2. 컨텐츠 작성

그 외

-북마크 추가한 내용을 동시에 북마크뷰 리스트에 추가하기

- 같은뷰의 같은 버튼이 다른 동작을 하도록 ( 딕트 뷰에서 뒤로가기 네비게이션 링크가 넘어갈때, 카테고리뷰에서 시작했으면 카테고리뷰로, 북마크뷰에서 시작했으면 북마크뷰로 넘어가도록) 구현

 



Swift 입문이다. 빠르게 기초를 끝내고 넘어가려고 블로그 정리를 시작한다.

이번 Swift 기초 다지기 포스팅은 부스트코스에 있는 야곰의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 보면서 배운점 위주로 진행할 예정이다.

이름짓기 규칙

-Lower Camel Case : 소문자로 시작해서 단어의 시작부분을 대문자로 구성한다.

함수, 메서드, 변수, 상수에서  LCC를 사용한다.

ex) eatMintChocolate

-Upper Camel Case: 대문자로 시작한다.

타입 ( 클래스, 구조체, 열거형, 익스텐션 등)

ex) Mint, Chocolate, Toothpaste

스위프트는 대소문자를 구분한다. 

콘솔로그 남기기

- print 함수 : 단순 문자열 출력

- dump 함수 : 인스턴스의 자세한 설명 (description 프로퍼티) 까지 출력

/* 콘솔로그와 문자열 보간법 */
import Swift

let age: Int = 10

"안녕하세요! 저는 \(age)살 입니다"
// == "안녕하세요! 저는 10살 입니다"

"안녕하세요! 저는 \(age+5)살 입니다"
// == "안녕하세요! 저는 15살 입니다"

print("안녕하세요! 저는 \(age+12)살 입니다")

print("\n###########################\n")

class Person{
    var name: String = "mincho"
    var age: Int = 22
}

let mincho: Person = Person()

print(mincho)

print("\n##########################\n")

dump(mincho)

위와 같이 코드를 짜는 경우 다음과 같은 로그가 찍힌다.

안녕하세요! 저는 22살 입니다

###########################

__lldb_expr_5.Person

##########################

▿ __lldb_expr_5.Person #0
  - name: "mincho"
  - age: 22

문자열 보간법(String Interpolation)

- 프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용

c에서 printf의 형식지정자로 %d, %c 썼던것과 비슷한 맥락인듯 하다.

\()

'IOS' 카테고리의 다른 글

SwiftUI Views - Basic Concepts  (0) 2022.04.29
SwiftUI Search Bar / 검색 기능 구현하기  (0) 2022.04.28
SwiftUI에서 리스트 동적으로 사용하기 (1)  (0) 2022.04.28
iOS 개인 프로젝트 시작  (0) 2022.04.28
Xcode 화면 구성  (0) 2022.04.27

실내 인테리어가 너무 잘되어있어서 게임으로 한번 구현해보고 싶었다.

알만툴을 처음 써봐서 약간 조잡하지만 그래도 나름 5시간만에 만든것 치고는 괜찮은것 같다.

나중에 합격해서 내부를 구경할 수 있다면 메타버스처럼 그대로 맵에 구현하는 것도 재밌을 것 같다.

 

https://drive.google.com/file/d/1wNjktno8AlxZ6k_XVU9CLd4mPhPhRYuo/view?usp=sharing 

 

AppleDevelopAcademy.zip

 

drive.google.com

 

 

+ Recent posts