일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Protocol
- swift documentation
- uitableview
- RxCocoa
- rxswift
- combine
- 스위프트
- swiftUI
- MVVM
- 리펙터링
- Clean Code
- Xcode
- 리펙토링
- ios
- tableView
- map
- 리팩토링
- Human interface guide
- 애니메이션
- 클린 코드
- uiscrollview
- UICollectionView
- ribs
- HIG
- Refactoring
- clean architecture
- UITextView
- collectionview
- SWIFT
- Observable
- Today
- Total
목록Observable (18)
김종권의 iOS 앱 개발 알아가기
@State, @Bindable 이란?@State 개념양방향 바인딩 (프로퍼티 뷰)@State는 Property wrapper로 구현되었으며 뷰의 상태를 표시해줄 목적으로 있는 키워드이 키워드로 프로퍼티를 선언하고 이 키워드를 뷰에 입력해주면, 이 프로퍼티가 변경되면 자동으로 뷰도 변경됨ex) string이라는 프로퍼티를 @State로 선언하고, 이 프로퍼티를 Text(string)으로 Text 뷰에 넣어준 후, string 프로퍼티 값을 변경해주면 자동으로 Text뷰에 반영됨import SwiftUIstruct ContentView: View { @State var string = "..." var body: some View { VStac..
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를 사용하..