[iOS/Combine] Combine - Error Handling
·
IOS - Swift/Combine
Error Handling (챕터 16) - 지훈NeverFailure 타입이 Never인 퍼블리셔는 절대 실패할 수 없다는 것을 나타냅니다.public typealias Failure = Never// Just 등의 publisher에서 사용퍼블리셔가 절대 실패하지 않음을 컴파일 타임에 보장에러 처리 로직이 필요 없음특징간단한 sink 구독 가능 (에러 핸들링 클로저 불필요)Just("Hello") .sink(receiveValue: { print($0) })// 에러 핸들링 없이 값만 처리Never Failure 퍼블리셔들sinkJustEmpty@Published 프로퍼티 래퍼Timer.publish()assign(to:on:)func assign( to keyPath: ReferenceW..
[iOS/Combine] Transforming Operators
·
IOS - Swift/Combine
Transforming Operators의 핵심 개념Transforming operators는 upstream publisher로부터 받은 값들을 변형해서 downstream으로 전달하는 연산자입니다.모든 operator는 publisher이며, upstream 이벤트를 받아서 조작한 후 downstream으로 전달합니다.에러 처리가 필요한 경우가 아니라면 upstream의 에러를 그대로 downstream으로 전달합니다.Mapmap은 업스트림 퍼블리셔의 모든 값의 타입을 변환시키는 Operator입니다.특징map 연산자는 업스트림 퍼블리셔로부터 전달받은 각 요소를 지정된 클로저를 사용해 변환합니다.Swift 문법 map 함수와 비슷하게 동작하고, 한 종류의 데이터를 다른 종류로 변환할 때 사용됩니다.구..
[iOS/SwiftUI] SwiftUI에서 특정부분만 UIkit으로 추출해서 사용하기
·
IOS - Swift/SwiftUI
이번에 스유 공부를 하면서 UIKit을 사용해야하는 경우를 많이 만나보았는데 UIHostingController 과 UIViewRepresentable 을 통해서 사용을 했었는데 말이죠근데 굳이 뷰컨을 새로 만들어서 기능을 끌고오는거보다 부분적으로 바로 사용하면 좋겟다는 생각이 들엇어요!그래서 한번 끄적여봣는데 잘못된 부분이나 질문 환영입니다 viewExtractor하기//// ContentView.swift// extract//// Created by 이지훈 on 12/3/24.//import SwiftUIstruct ContentView: View { var body: some View { VStack { // 시스템 이미지 설정 Imag..
[iOS] UIkit + SwiftUI 둘다 사용하기!
·
IOS - Swift/SwiftUI
이번에 솝커톤을 나가면서 경험했던 UIkit 과 SwiftUI를 둘다 사용해야 했던 상황에서 경험한 멀티모듈 사용법 정리 UIHostingController: UIKit에서 SwiftUI View를 사용하기UIKit 기반 프로젝트에서 SwiftUI 뷰를 호스팅하는 데 사용됩니다.사용 예시:SwiftUI로 만든 특정 뷰를 기존 UIKit 뷰 계층에 삽입할 때.UIKit의 UIViewController나 UINavigationController 위에 SwiftUI 뷰를 추가할 수 있습니다.동작 방식SwiftUI 뷰를 UIKit에서 UIHostingController의 rootView로 설정하면, UIKit에서 SwiftUI 뷰를 렌더링합니다.import UIkitimport SwiftUIprivate fun..
subscription의 이해
·
IOS - Swift/Combine
A protocol representing the connection of a subscriber to a publisher.구독자와 퍼블리셔의 연결을 나타내는 프로토콜입니다.오~Subscription이란?Subscription은 Publisher와 Subscriber 사이의 연결을 관리하는 프로토콜입니다. 퍼블리셔가 데이터를 발행하고, 서브스크라이버가 이를 수신하는 과정에서 두 객체 간의 관계를 중재하고 제어하는 역할을 합니다.Subscription은 단순히 데이터를 전달하는것을 넘어 데이터를 요청하고, 전달하고, 구독을 취소하는 메커니즘을 제공하여 메모리 관리와 리소스 효율성을 보장합니다.Subscription은 Cancellable을 채택했네요.Cancellable은 나중에 다시 살펴보고! Subs..
Publisher - Just, Empty, Failure
·
IOS - Swift/Combine
JustJust는 가장 기본적인 Publisher 입니다.한 개의 아웃풋을 각각의 Subscriber에게 단 한 번 보내고, 종료합니다.다시말해서, 자신을 구독(subscribe)하는 구독자(subscriber)들에게 한번의 값만 전송하고 finish 하는 Publisher 입니다실제 코드로 보면, Failure가 Never로 고정되어있습니다.즉, Just는 에러를 발행할 수 없고 무조건 Output만 발행될 수 있다는것을 의미합니다.public struct Just : Publisher { public typealias Failure = Never public let output: Output public init(_ output: Output) public func receive..
Combine - Publisher 기초
·
IOS - Swift/Combine
Publisher는 직역하면 발행자입니다.데이터 스트림이나 이벤트를 생성하고 이것을 Subscriber(구독자) 에게 직접 전달하는 역할을 하는 객체입니다. 애플 공식문서에는타입이 시간 경과에 따라 일련의 값을 전송할 수 있음을 선언합니다. 다시말해, 구독자와 같은 하나이상의 관계자에게 시간이 지남에 따라서 값을 보내는(전달하는) 타입 입니다.관심있는 값이나 이벤트를 게시 (Publish) 하게 되는것이죠!데이터 스트림Publisher에서 연결되어 Subscriber까지 이어지는 데이터의 흐름이 생기는 일련의 과정을 Data Stream(데이터 스트림) 이라고 합니다.다시말해, 시간에 따라 연속적으로 발생하는 데이터 시퀸스입니다. 즉, 순차적으로 처리되거나 관찰됩니다.UpStream, DownStream..
[iOS/Swift] 로컬알람 구현하기(APNs)
·
카테고리 없음
iOS에서 로컬 알림(Local Notification) 구현하기기본 설정 및 권한 요청먼저, 사용자가 앱에서 알림을 받을 수 있도록 권한을 요청해야 합니다. 이를 위해 UserNotifications 프레임워크를 사용합니다.import UserNotificationsclass LocalNotificationManager { static let shared = LocalNotificationManager() private let notificationCenter = UNUserNotificationCenter.current() private override init() { super.init() notificationCenter.delegate = self ..
[iOS/Swift] Moya Interceptor 로 자동로그인 구현하기
·
카테고리 없음
RequestInterceptor는 Alamofire에서 제공하는 프로토콜입니다.Moya는 Alamofire를 wrapping한 라이브러리이기 때문에 해당 프로토콜을 사용할 수 있습니다.RequestInterceptor에서 RequestAdapter과 RequestRetrier를 채택하고 있습니다. 이름 그대로 통신을 Interceptor하여 작업을 수행합니다.또한 해당 프로토콜은 각각 adapt, retry 함수를 요구합니다.그리고 RequestInterceptor는 extension을 통해 이 adapt와 retry의 기본 구현을 제공합니다.adapt는 Request가 전송되기 전에 원하는 추가적인 작업을 수행할 수 있도록 하는 함수입니다. 즉, 이 함수에 다음과 같이 헤더에 넣을 토큰을 지정해주면 ..