iOS 63

Coordinator 패턴으로 SwiftUI 화면 전환 시키기

Coordinator 패턴은 뷰에서 내비게이션 로직을 분리하여 따로 관리하는 패턴입니다. 이 패턴을 구현해보면서 알아보겠습니다.import Foundation// 내비게이션 될 목적지를 정의하는 열거형// Hashable을 채택해야 NavigationPath에서 사용할 수 있음enum NavigationDestination: Hashable { case detail(item: String) case settings case profile(userId: UUID)}네비게이션으로 어떤 뷰로 이동할지 정의합니다. import SwiftUI@MainActorfinal class Router: ObservableObject { // NavigationStack의 경로를 저장하고 변화를 감..

iOS

SwiftUI의 ViewModifier

오늘은 ViewModifier가 무엇인지, 어떻게 사용되는지에 대해서 알아보겠습니다.먼저 프로젝트 UI중에 카드형태가 반복되는 화면이 있었습니다. 이 화면에서 코드중복을 줄이기 위해 ViewModifier를 사용하였습니다. ViewModifier란?SwiftUI에서 View에 스타일이나 동작을 덧입히는 구조체 프로토콜로, 재사용이 가능해서 코드 중복을 줄여줍니다. 먼저 제가 작성한 예제를 보고 이야기를 해보겠습니다.struct CardStyle: ViewModifier { func body(content: Content) -> some View { content .padding(10) .frame(maxWidth: .infinity, alignme..

iOS

Tuist로 프로젝트 생성하기

어제는 Tuist가 어떤것이고, 왜 사용하는지에 대해서 알아보았습니다. 그리고 컴퓨터에 설치하는 것 까지 해보았는데요. 오늘은 설치된 Tuist로 프로젝트를 생성하고 살펴보도록 하겠습니다. 프로젝트 생성하기Tuist 공식 문서를 참고해서 아래 명령어를 입력하여 프로젝트를 생성해주었습니다.mise x tuist@latest -- tuist inithttps://docs.tuist.dev/ko/guides/quick-start/get-started What is Tuist? | Tuist docs.tuist.dev명령어에 대해서 잠깐 살펴보겠습니다. mise: 다양한 개발 도구의 버전을 관리하는 도구 x: mise의 exec 명령어로, 특정 도구를 임시로 설치하고 실행 tuist@latest: Tuist의..

iOS

Tuist에 대해서 알아보기

오늘은 Tuist에 대해서 알아보겠습니다. TuistTuist는 프로젝트 생성과 관리를 편리하게 도와주는 도구입니다.코드로 프로젝트파일(.xcodeproj)을 생성시켜서 iOS 프로젝트를 코드로 관리할 수 있도록 도와줍니다. Tuist를 사용하는 이유1. Xcode 프로젝트 파일 충돌 해결새로운 프레임워크나 파일을 추가하다보면 프로젝트파일(.xcodeproj)에서 충돌이 자주 발생하게 됩니다. 이 프로젝트 파일은 내용이 복잡하고 읽기 어려운 방식으로 작성되어있습니다. Tuist를는 swift코드로 프로젝트 파일을 정의하고, 코드가 수정된 후에 tuist generate 명령어를 실행하면 프로젝트 파일이 새로 만들어지기 때문에 충돌을 방지할 수 있다는 장점이 있습니다. 2. 모듈화와 재사용성Tuist는 모..

iOS

메모앱 만들기

오늘은 UITableView와 UserDefaults를 활용하여 메모를 작성하고 삭제할 수 있는 메모앱을 만들어보겠습니다. 주요기능+ 버튼을 눌러서 새로운 메모 추가 (Alert를 활용해서 데이터 입력받기)리스트의 메모를 스와이프하여 삭제초기화 버튼을 눌러서 전체 메모 삭제UserDefaults를 활용하여 앱 종료 후에도 메모 리스트를 유지UI구성프로젝트 구조View - 코드를 사용하여 UI를 작성ViewController - 사용자의 클릭 이벤트에 의한 동작 구현MemoListViewTableView를 보여주기위해 선언해줍니다.let memoTableView: UITableView = { let tableView = UITableView(frame: .zero, style: .plain) t..

iOS

카운터 앱 만들기

오늘은 UIKit을 활용해 숫자를 증가, 감소, 초기화할 수 있는 간단한 카운터 앱을 만들어보겠습니다. 주요 기능+ 버튼 클릭 시 숫자가 1씩 증가- 버튼 클릭 시 숫자가 1씩 감소Reset 버튼 클릭 시 숫자가 0으로 초기화숫자는 UILabel을 통해 화면 중앙에 표시숫자는 최소 -10에서 최소 10까지 제한됨최대/최소 값일 때 UI 반응 변경 (테두리 색상, 버튼 비활성화)UI구성프로젝트 구조View - 코드를 사용하여 UI를 작성ViewController - 사용자의 클릭 이벤트에 의한 동작 구현CounterViewlabel과 버튼을 배치하는 부분은 어제 만들었던 RandomColor 프로젝트와 같기 때문에 생략하고, label의 테두리를 만드는 부분을 살펴보겠습니다.let numberLabel: ..

iOS

랜덤 컬러 생성 앱 만들기

오늘은 UIKit을 활용하여 버튼을 클릭할 때 마다 배경색이 랜덤하게 바뀌는 랜덤 컬러 생성 앱을 만들어보겠습니다. 주요 기능버튼을 클릭하면 배경색이 랜덤하게 바뀌고, 색상의 RGB 값을 화면에 보여준다.리셋 버튼을 클릭하면 배경색이 흰색으로 초기화되고, RGB값도 함께 초기화된다.UI 구성프로젝트 구조View - 코드를 사용하여 UI를 작성ViewController - 사용자의 클릭 이벤트에 의한 동작 구현 ColorView 배경색을 표시해주는 Label과 배경색을 변경하는 두가지 Button을 선언하고 설정을 합니다.이후에 Auto Layout을 통해 레이아웃을 잡아주기 위해서 translatesAutoresizingMaskIntoConstraints를 false로 설정해줍니다.var colorLa..

iOS

Combine

combine은 Apple에서 제공하는 프레임워크로 데이터를 비동기처리하고 이벤트를 선언적으로 처리하기위해 사용됩니다. 구성요소로는 publisher, subscriber, operators가 있습니다publisher: 데이터를 제공subscriber: 데이터를 받고 처리operators: publisher와 subscriber 사이에서 데이터를 가공먼저 간단하게 사용 예제를 보여드리겠습니다import Combinelet arr = [10, 20, 30, 40, 50].publisherarr .map { $0 * 2 } .sink { print($0) }1. publisher를 통해서 배열의 값을 하나씩 방출2. 방출된 값을 map(operator)을 통해 변환3. sink(subscriber)를 통해 ..

iOS

비동기 프로그래밍과 제네릭

오늘은 swift로 비동기 프로그래밍 하는 방법과 제네릭에 대해서 알아볼 예정입니다. 비동기 프로그래밍먼저 비동기 프로그래밍이란 여러가지 작업을 동시에 실행하거나, 작업중인 내용을 기다리지 않고 다른 작업을 실행할 수 있도록하는 프로그래밍 방식입니다. swift에서 사용할 수 있는 비동기 프로그래밍 방식은 GCD, OperationQueue, Swift Concurrency 등 여러가지 방법이 있지만 오늘은 GCD를 사용해서 비동기 프로그래밍을 해보겠습니다. 먼저 GCD에는 프로그램을 실행시킬 수 있는 여러가지 큐가 존재합니다. 그중에서 가장 많이 사용되는 큐는 Global Queue, Main Queue가 있습니다. Global Queue: 백그라운드에서 작업을 처리할 수 있는 큐Main Queue:..

iOS

클로저/객체지향 프로그래밍

오늘은 클로저와 객체지향 프로그래밍에 대해서 알아보겠습니다.클로저클로저는 독립적으로 기능을 하는 코드블록을 말합니다.클로저는 변수나 상수에 저장이 가능하고, 함수의 인자로 전달이 가능합니다. 클로저를 사용해보기 위해 배열에 있는 숫자를 모두 두배로 만드는 클로저를 만들어보겠습니다.var arr: [Int] = [1, 2, 3, 4, 5]let doubleNum = arr.map { $0 * 2 } 다음은 클로저의 특징인 값 캡쳐에 대해 알아보겠습니다. 클로저는 외부의 변수나 상수의 값을 캡쳐해서 가지고있습니다. 캡쳐의 특징을 보여주는 코드를 작성해서 알아보겠습니다.var counter: Int = 0let incrementCounter = { counter += 1}incrementCounter(..

iOS