분류 전체보기
-
StateObjectSwiftUI 2023. 1. 28. 14:01
ObservableObject를 인스턴스화 하는 프로퍼티 래퍼 SwiftUI 는 각 객체가 생성될 때 한 번만 새로운 객체를 생성하고, ObservableObject 의 @Published 프로퍼티가 바뀔 때 관련 뷰를 업데이트 합니다. 아래와 같이 사용할 수 있습니다. class Book: ObservableObject { @Published var title = "Great Expectations" } struct BookView: View { @StateObject var book: Book var body: some View { Text(book.title) } } state object를 ObservedObject attribute 를 갖는 프로퍼티로 넘길 수도 있지만, environmentOb..
-
ObservedObjectSwiftUI 2023. 1. 28. 13:31
A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes. ObservableObject 를 구독하고 ObservableObject 값이 바뀔 때마다 뷰를 무효화하고 새로 그리는 (invalidates a view) 객체 아래와 같이 사용할 수 있다. ObservableObject 객체를 @ObservedObject 프로퍼티 래퍼로 선언해두면, ObservableObject 의 @Published 값이 바뀔 때마다 뷰를 업데이트 한다. (새로 그린다.) class Book: ObservableObject { @Published var ti..
-
ObservableObjectSwiftUI 2023. 1. 28. 12:44
객체가 변경되기 전에 방출하는 퍼블리셔를 갖는 객체 타입 ObservableObject 는 objectWillChange 퍼블리셔와 동기화되어 있습니다. 이 objectWillChange 퍼블리셔는 @Published 프로퍼티가 변경되기 전에 값을 방출합니다. class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { self.name = name self.age = age } func haveBirthday() -> Int { age += 1 return age } } let john = Contact(name: "John Appleseed", age: ..
-
Swift Package 란Swift 2023. 1. 17. 15:45
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. 번들 소스파일, 바이너리, 리소스 등을 앱에서 사용하기 쉽게 번들로 제공합니다. Xcode 12부터 (swift-tool-version: 5.3 이상) Swift Package Manager 를 사용해 Swift Package 를 만들고 배포하고 추가, 제거 뿐 아니라 의존성 관리도 할 수 있습니다. 참고 https://developer.apple.com/documentation/xcode/swift-packages Apple Developer Documentation developer.apple.com Swift Package M..
-
[PackageDescription] 재사용 가능한 코드를 쉽고 편리하게 관리하자Swift 2023. 1. 17. 15:38
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. Swift Package 는 메인 디렉토리에 Package.swift 파일이 필수로 필요합니다. 이 파일 안에서 package manifest 의 PackageDescription 라이브러리를 사용해 의존성, 리소스, 여러 옵션을 관리할 수 있습니다. 예로 SlothCreator: Building DocC Documentation in Xcode 프로젝트의 package.swift 파일은 다음과 같이 생겼습니다. 안에 "SlotCreator" 라이브러리를 갖고 있는 패키지를 정의했고 타켓 정보들도 명시할 수 있습니다. import ..
-
decode vs decodeIfPresentiOS 2022. 12. 14. 16:01
Codable 이후 필드명이나 코딩키만으로 직접 디코딩없이 파싱이 가능해졌지만, 그럼에도 별도의 처리가 필요하다면 여전히 디코더를 통한 생성자를 만들어줘야 할 때가 있습니다. 이때 필요한 decode 와 decodeIfPresent 의 차이는 "해당 필드가 존재하냐" 의 여부로 관점으로 생각해볼 수 있습니다. 다음 JSON 을 파싱하려고 할 때, { title: "woongs", subtitle: "decoding" } 다음과 같이 만들어볼 수 있습니다. 아직 딱히 문제는 없습니다. required init(from: decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.title = t..
-
[iOS] APNs 를 통한 Push 알림 이해하기iOS 2022. 12. 7. 16:04
오늘은 개개인이 갖고 있는 아이폰 디바이스에 푸시 알림이 오는 과정에 대해 알아보려고 합니다. 앱 개발자의 관점에서 살펴봅니다 :) 먼저 푸시가 전송되는 큰 흐름을 간략하게 보고 블라인드로 남아있는 부분을 하나씩 알아보겠습니다. 흐름 이해하기 개별 디바이스에 직접적으로 푸시 알림을 보낼 수 있는 주체는 오직 APNs 뿐입니다. APNs 란 Apple Push Notification server 의 약자로 즉 애플만이 직접적으로 디바이스에 푸시 알림을 보낼 수 있습니다. 따라서 저희는 APNs 에게 우리 앱에 푸시를 보내줘! 라고 요청해야 합니다. 이 요청이 유효한지 보고 APNs 가 푸시를 보낼지 말지를 판단합니다. 이 요청 또한 정해진 규격에 맞게 APNs 와 연결한 후에 가능하고, 이를 위해 APNs..