일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- Refactoring
- UICollectionView
- 클린 코드
- tableView
- ios
- rxswift
- swift documentation
- 애니메이션
- UITextView
- map
- HIG
- MVVM
- Protocol
- Observable
- RxCocoa
- 리팩토링
- uitableview
- uiscrollview
- Human interface guide
- clean architecture
- 리펙터링
- swiftUI
- combine
- ribs
- collectionview
- Xcode
- Clean Code
- SWIFT
- 리펙토링
- 스위프트
- Today
- Total
목록Observable (17)
김종권의 iOS 앱 개발 알아가기
RxSwift의 스트림 처리 RxSwift를 사용할 때 보통 Observable 인스턴스를 .subscribe하여 onNext, onError, onCompleted로 처리가 가능 RxSwift는 위에서 아래로 stream 형태로 비동기 처리를 코드상으로는 순서대로 눈에보기 쉽게 처리가 가능 API.download(file: "http://www...") .subscribe(onNext: { data in // Append data to temporary file }, onError: { error in // Display error to user }, onCompleted: { // Use downloaded file }) 이번 포스팅 글에서 RxSwift의 Observable과 Observer 구현부..
RxSwift의 Reactive로 만든 getter, setter myView라는 커스텀 뷰를 사용할 때, myView의 이벤트들을 rx 네임스페이스로 접근 getter부분: .rx.tapButton setter부분: .rx.setTitleButton func bind() { myView.rx.tapButton //
Single, Completable 차이 Single과 Completable 차이 Single은 onSuccess, onError 두 가지만 존재하고, success에서 값을 같이 방출 Completable은 onCompletable, onError 두 가지만 존재하고, 따로 값을 방출 x 값을 단순히 가져오거나 특정 일을 한 후 반환값이 필요 없는 경우, Single 대신에 Completable을 사용할 것 import UIKit import RxSwift class ViewController: UIViewController { let observable = Observable.create { observer in observer.onNext(10) print("finish") return Dispos..
RxSwift의 Deferred 단어 그대로, deferred 함수에는 파라미터로, Observable을 리턴하는 클로저를 받아서 그 클로저를 내부적으로 저장해놓았다가 해당 Observable이 필요할 때 그 클로저에 접근하여 사용 Observable을 지연시키는 것이 아닌, deferred의 인수로 들어간 클로저안의 동작을 지연시키는 것임을 주의 extension ObservableType { public static func deferred(_ observableFactory: @escaping () throws -> Observable) -> Observable { Deferred(observableFactory: observableFactory) } } ex) Observable을 리턴하는 메소드..
목차) Combine - 목차 링크 @Published propertyWrapper 형태이며 내부적으로 didSet에서 이벤트 방출하는 역할 @propertyWrapper public struct Published 사용하는 쪽에서는 $ 기호를 이용하여 projectedValue에 접근 propertyWrapper의 projectedValue 개념은 이 포스팅 글 참고 final class MyData { @Published var number: Int init(number: Int) { self.number = number } } let data = MyData(number: 20) data.$number .sink { print("change value? = \($0)") } data.number = ..
Observable의 Deferred 보통 어떤 작업을 wrapping할때 Observable.create()를 사용하지만, deferred를 사용하는 방법이 존재 // Observable.create 사용 예제 // stored propoerty let aObservable = Observable.create { observer in DispatchQueue.main.asyncAfter(deadline: .now() + 3) { observer.onNext(1) observer.onCompleted() } return Disposables.create() } // computed proprety var bObservable: Observable { .create { observer in observer..
핑퐁 로직 PingPong을 사용하는 케이스는 일반적으로 웹소켓에서 사용 앱에서 서버에게 ping을 보내고, 서버로부터 pong을 받는 로직 만약 서버로부터 pong이 앱에서 설정한 특정 시간안에 안오면 lost connection으로 판단 주의할점 앱에서 서버에서 ping을 보낼때 throttle 적용 (만약 pong이 올때마다 ping을 날리면 짧은순간에 수많은 통신이 이루어짐) 핑퐁 구현 아이디어 ping을 보내는 부분 1) API.requestPing 수행 -> response를 받으면 다시 ping을 보내는 코드를 구현 2) 서버에ping을 보낼땐 항상 timer를 사용하여 시간을 체크하고 타이머가 다 된 경우, completion 처리를 수행 타이머는 Swift에서 제공하는 Timer를 사용하..
사용한 framework pod 'RxSwift' pod 'RxCocoa' 시작, 취소 기능을 Observable로 구현 DispatchWorkItem과 Operation을 사용하여 task들을 관리할 수 있지만 Observable를 사용하면 더욱 단순화 * Operation 포스팅 글 참고 * DispatchWorkItem 포스팅 글 참고 Observable을 사용하면 다양한 Rx 연산자 사용이 가능하여 다른 기능을 붙이기에 용이 시작, 취소 기능 구현 아이디어 시작 기능 시작 버튼을 탭하면 task를 시작하고, 만약 기존에 task가 실행중이면 내부적으로 취소한 후 실행 Observable로 task를 관리하면, disposeBag = DisposeBag()과 같이 초기화하여 기존 작업을 손쉽게 취소..