iOS

    [SwiftUI] Core Data를 이용한 데이터 CRUD (iCalories)

    그동안 궁금했던 점 : 앱을 껐다 켜도 내가 데이터를 추가, 수정, 삭제한 내역이 저장되게 하려면 어떻게 해야 할까? Core Data를 이용하면 이게 가능했다. 간단한 예시를 통해 Core Data의 핵심을 살펴보자 Data Model 파일 생성 Add Entity & Add Attribute Data Controller 파일 생성 ( Core Data를 불러오고 재가공하는 함수 코드가 담긴 파일. 일종의 ViewModel 역할을 하는듯? ) App 파일에서 Data를 이 플젝 전역에 뿌려주기 View 파일 생성 & 코딩 1. Data Model 파일 생성 처음에 Use Core Data 체크 안해도 new file을 통해 Data Model 파일을 생성할 수 있다. 생성한 후, 2. Add Entit..

    [SwiftUI] iOS App Dev Tutorial에서 Data Update 파트 간단 정리

    그동안 내가 궁금해했던 CRUD중 data를 Update하는 파트를 정리해보자! 우선 흐름을 먼저 잡아보자 DetailEditView 생성 기존 data 불러와서 DetailEditView에도 띄우기 데이터 수정 수정된 데이터 저장 기존 View에 갱신된 데이터로 띄우기 (사실 4까지 잘 되면 5는 자동으로 됨. 그냥 저장된 데이터를 불러오는 코드이므로) 각 흐름에 대한 key를 정리해보자 쓰이는 코드들 : [ TextField, 이미 만들어놓은 PickerView, Slider의 value값, 새로운 멤버 append ] DetailView에서 @State로 선언된 data -> DetailEditView에서 @Binding wrapper로 받는다 (& 데이터 타입 선언) $(바인딩)으로 각각 valu..

    [SwiftUI] Making Classes Observable

    *이 글을 애플 공식문서를 번역한 글입니다. Working with Reference Types 우리는 프로퍼티의 SOT를 식별하기 위해 @State를 썼다. 하지만 @State wrapper는 오직 value type(값 타입)에서만 적용된다. 값 타입은 Struct, Enum(구조체, 열거형)을 말한다. 그래서 SwiftUI는 SOT를 참조타입으로 선언하기 위한 프로퍼티 wrapper를 제공한다 : @ObservedObject, @StateObject, @EnvironmentObject 이 wrapper들을 사용하기 위해서는, 우리의 class를 observable하게 만들어줘야 한다 Making a Class Observable ObservableObject 프로토콜을 통해 class를 observ..

    [Swift] Struct, Initializer (구조체와 이니셜라이저)

    ※ Struct & Class 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용 프로퍼티, 메서드를 사용하여 구조화된 데이터, 기능을 가질 수 있음 하나의 새로운 사용자 정의 데이터 타입을 만들어 주는 것임 ( ex. var animal : Animal 이 뜻은 Animal이라는 데이터 타입을 따르는 animal이라는 변수라는 뜻 ) 구조체와 클래스의 차이는 구조체 인스턴스는 값(value) 타입 : 전달될 값이 복사되어 전달 클래스 인스턴스는 참조(reference) 타입 : 값을 복사하지 않고 참조(주소)가 전달 Struct 구조체 정의가 의미하는 것 구조체를 정의한다는 것은 새로운 타입을 생성해주는 것 기본 타입 이름처럼 Upper Camel Case 적용한다 구조체에..

    [SwiftUI] Managing Data Flow Between Views

    *이 글은 SwiftUI 공식문서를 번역한 글입니다. Source of Truth 앱을 사용할 때, 저장되어있는 정보들이 복사되는 형식(여러 개의 복사본이 생성되는 형식)을 따르면 정보에 대한 여러 복사본들의 통일성을 유지하기가 힘들어진다. 이로 인해 야기되는 Inconsistency는 여러 버그들을 낳는다. 그래서 이를 막기 위해 source of truth(각 data가 저장되어 있는 곳. 주소) 개념을 사용한다. data는 하나의 위치(source of truth)에 저장되고, data가 필요한 view들은 이 주소에 접근할 수 있다. 우리가 이 source of truth를 생성할 수 있다. 이 source들을 어떻게, 어디다가 정의하고 생성하는지는 이 data가 여러 뷰들 사이에 공유되는 것인지..

    iOS App States

    iOS 앱에서, 시스템 자원은 한정적이기 때문에 앱의 상태가 foreground인지, background인지 아는 게 중요 -foreground : 사용자가 보고 있는 화면. 그렇기 때문에 CPU를 비롯한 시스템 자원의 우선순위가 높은 상황 -background : 앱이 홈 화면으로 들어가서 사용자한테 보이지 않는 상태. 하지만 여기서 중요한 것은 앱이 background 상태가 되어도 계속 실행해야 될 때가 존재한다. (Ex. 음악 어플) 애플에서는 앱을 실행할 때 다음의 가이드라인을 따르기를 요구 -앱의 상태 변화에 따라 적절하게 대응해야함. 그렇지 않다면 데이터 손실이나 사용자에게 좋지 않은 경험을 느끼게 할 수 있음 -앱의 상태가 background로 바뀔 때, 앱이 이에 대해 적절하게 대응해야 ..

    [SwiftUI] Design Pattern : MVVM

    SwiftUI에서 MVVM 패턴은 불필요한 것이란 얘기가 많다. MVVM 패턴은 View와 Model 사이에서 데이터를 주고 받을 때 ViewModel을 사용하는 패턴인데, SwiftUI에서는 SwiftUI.View에 ViewModel의 data binding이 포함되어 있기 때문이다. 그렇기 때문에 SwiftUI에서 ViewModel을 쓰는 것은 불필요한 레이어를 하나 더 끼워 넣는 꼴이기 때문에 불필요하다는 얘기가 많다. 하지만, Swift를 공부하는 입장이라면 적어도 MVVM 패턴이 어떤 것인지 알아야 할 필요가 있기 때문에 MVVM 패턴에 대해 알아보도록 하겠다. Model + View + ViewModel MVVM은 Model, View, ViewModel로 구성된 design pattern이다..

    [iOS 앱 프로그래밍] 회원가입 화면 구현 - 2. 화면의 전환 (1) 내비게이션 인터페이스

    내비게이션 인터페이스 iOS 애플리케이션에서 화면전환을 위해 사용되는 여러 기법 중 하나. iOS에서 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)이다. 드릴 다운 인터페이스란 아래 그림과 같이 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스이다. 어떻게 구현하나? by 내비게이션 컨트롤러 내비게이션 컨트롤러의 mechanism : stack 개념 내비게이션의 컨트롤러는 2가지 뷰 요소를 화면에 띄운다 -> 컨텐트 뷰 & 내비게이션 바 - 내비게이션 컨트롤러 생성 // 내비게이션 컨트롤러의 인스턴스를 생성하는 메서드입니다. // 매개변수로 내비게이션 스택의 가장 아래에 있는 루트 뷰 컨트롤러가 될 뷰 컨트롤러..