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가 전송되기 전에 원하는 추가적인 작업을 수행할 수 있도록 하는 함수입니다. 즉, 이 함수에 다음과 같이 헤더에 넣을 토큰을 지정해주면 ..
[iOS/Swift] Combine - 시작하기 (Publisher ,Operator, Subscriber)
·
IOS - Swift/Combine
컴바하아인 Introducing Combine - WWDC19 - Videos - Apple Developer Combine is a unified declarative framework for processing values over time. Learn how it can simplify asynchronous code like networking,... developer.apple.com 컴바인을 사용하는 이유 텍스트 필드에 입력된 값을 다음 vc에 전달하는 코드가 있다고 가정할때, 1. Delegate 패턴 Delegate 패턴은 객체 간의 커뮤니케이션을 위해 인터페이스를 정의하고, 하나의 객체가 다른 객체를 대신해서 작업을 수행하도록 합니다. WelcomeViewController.swift p..
[iOS/Swift] Closure의 캡쳐리스트와 ARC + AnyObjet
·
IOS - Swift
Closure Capture list 이 코드를 실행시키면 어떻게 될까요? “Hello, World!”가 출력됩니다 그러면 이 코드를 실행시키면 어떻게 될까요? “next”가 출력됩니다. 이런 일이 벌어지는 이유가 뭘까요? 바로 capture list때문입니다. Capture List가 뭔데요? 위 코드에서, 함수를 실행시키려면 Str 이라는 변수가 있어야 하는데 str을 (범위 바깥에서도) 지속적으로 사용하고 싶어서 잇는게 Capture 입니다. Closure의 범위 외부에 있지만 Closure의 내부에서 사용해야해 라는 뜻이에요. 즉, 외부에 존재하는 변수를 사용하기위해 사용됩니다. 실제로는 변수를 캡쳐하는일은 잘 없고 보통 객체를 캡쳐해서 사용합니다 self.사용할 객체 이런식으로 사용합니다. 캡쳐..
[iOS/SwiftUI] Property Wrapper - 기본편
·
IOS - Swift/SwiftUI
스유를 시작하면서 사용한 속성들을 정리해보았다. 정리를 시작하면서 든 생각은 엥 사실상 Combine 아니냐 라는 생각이 들었지만 제대로 컴바인과 Rx도 해본적이 없기에.. 일단 전체적으로 정리를 해보고 추후 깊게 하나하나 파볼 생각이다. Property Wrapper @State - 뷰의 상태를 저장하는 속성 스유에서 상태를 처리하는 방법 뷰의 상태를 저장하는 프로퍼티로 상태관리 주체는 해당 뷰 기본적으로 private 선언이기에 다른 뷰와 값을 소통하려면 Binding을 이용 값이 변경될때마다 UI 업데이트 struct ContentView: View { @State private var isPlaying: Bool = false var body: some View Button(isPlaying? "..
[iOS/Swift] CGPoint + CGSize = CGRect
·
카테고리 없음
CGPoint, CGSize, CGRect 이런식으로 빨간색 view를 그린다고 가정했을 때, 필요한 정보들은 View의 위치, View 의 크기 입니다. 좀더 정확하게 말하자면, View의 x ,y 좌표, View의 높이 + 너비 가 됩니다. (Label같이 유동적인 높이 제외) 그리고 종합하자면, 위 CG들은 이것들을 종합하기 위해서 사용됩니다. CGPoint 간단하게 말하면, 그냥 CGPoint는 x, y 라는 변수를 가지고 View의 위치를 나타낼 수 있습니다. 물론 View의 위치뿐만 아니라 x,y 좌표를 사용해야하는 경우에는 어디서든지 사용 가능합니다. CGSize 그리고 마찬가지로 CGSize의 경우에도 width 와 height를 사용 가능합니다. 하지만 실제로 view의 크기를 조정하는 ..
[회고] GDSC 해커톤 후기
·
기타
내가 소속한 동아리인 GDSC에서 새해기념 연합 해커톤에 참여하게 되었다. 작년에 참여한 새싹톤의 경우에는 기획부터 서비스 1차 구현,2차구현 등 기간이 한달 이상으로 넉넉하기도 했고 같은 GDSC 사람들이여서 짧은 기간내에 무언가 하나를 뽑아내야하는"해커톤" 이라기 보다 "단기 프로젝트" 느낌이 강했다. 물론 실력있는분들에게 멘토링을 받고 다른 실력있는 기획,디자인,안드,백엔드분들과 정해진 기간동안 하나의 서비스를 만들어 냇다라는것 자체만으로 충분히 의미가 있다고 생각한다. 새싹톤의 경우, 한달이상의 시간이 있었고, 최종결과이후 약간의 나태해짐과 바로 JMT개발 등으로 인해 제대로된 회고를 남기지 못했는데 이번에는 여운을 길게 가져가보고자 회고를 작성해보려 한다. 본격적인 시작에 앞서 사실, 본격적으로..