일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- clean architecture
- Observable
- Human interface guide
- UITextView
- SWIFT
- combine
- Clean Code
- swiftUI
- uiscrollview
- UICollectionView
- swift documentation
- map
- 클린 코드
- RxCocoa
- collectionview
- 리펙터링
- Xcode
- 스위프트
- HIG
- ribs
- rxswift
- Refactoring
- 리펙토링
- 리팩토링
- ios
- tableView
- uitableview
- 애니메이션
- Protocol
- MVVM
- Today
- Total
목록rxswift (43)
김종권의 iOS 앱 개발 알아가기
do(onError:)는 모든 스트림 에러 모두 처리 상위 flatMap에서 에러 발생 시 1onError, 2onError 둘 다 동작 1onError만 출력되지 않고 2onError도 출력된다는것을 주의 중간에 flatMap으로 Observable로 변경하는데도, 상위 Observable에서 발생한 error가 그대로 내려오므로 주의 struct MyError: Error {} Observable .just(()) .flatMap { _ -> Observable in throw MyError() } .debug("1디버그") .do( onNext: {print("1next")}, onError: {_ in print("1onError")}, onCompleted: {print("1onCompleted..
목차) Combine - 목차 링크 Combine과 RxSwift의 주요 차이점 Combine과 RxSwift 모두 Publisher, Subscriber하는 컴포넌트가 있고, stream을 만들어서 그 stream안에 operator를 사용하여 이벤트를 처리하는 형태 Combine은 RxSwift보다 성능이 훨씬 향상 ex) 성능 테스트 map, filter, flatMap 등을 결합한 연산자 시간과 메모리 사용량 비교 // 출처: https://medium.com/@M0rtyMerr/will-combine-kill-rxswift-64780a150d89 import XCTest import Combine import RxSwift final class PlaygroundTests: XCTestCase ..
핑퐁 로직 PingPong을 사용하는 케이스는 일반적으로 웹소켓에서 사용 앱에서 서버에게 ping을 보내고, 서버로부터 pong을 받는 로직 만약 서버로부터 pong이 앱에서 설정한 특정 시간안에 안오면 lost connection으로 판단 주의할점 앱에서 서버에서 ping을 보낼때 throttle 적용 (만약 pong이 올때마다 ping을 날리면 짧은순간에 수많은 통신이 이루어짐) 핑퐁 구현 아이디어 ping을 보내는 부분 1) API.requestPing 수행 -> response를 받으면 다시 ping을 보내는 코드를 구현 2) 서버에ping을 보낼땐 항상 timer를 사용하여 시간을 체크하고 타이머가 다 된 경우, completion 처리를 수행 타이머는 Swift에서 제공하는 Timer를 사용하..
ApplicationState ApplicationState는 크게 Not Running, Inactive, Active, Background, Suspended 상태가 존재 앱에서 상태를 체크하여 처리하는 대표적인 케이스 - Active (foreground) 상태와 Background 상태를 구분하여 Active상태에서는 푸시메시지가 전송 안되게끔 막는 방법 RxSwift로 ApplicationState 처리 방법 ApplicationState는 아래처럼 코드로 접근이 가능 UIApplication.shared.applicationState 코드로 확인할 수 있는 상태는 3가지만 존재 // UIApplication.swift @available(iOS 4.0, *) public enum State :..
UIButton 하나로 토글 버튼 구현 방법 UIButton에는 normal, selected, highlighted가 존재 normal과 selected 상태를 이용하여 토글 버튼으로 활용 highlighted애니메이션은 setImage(_:for:) 에서 for부분에 적용 normal -> highlighted 애니메이션은 for: .highlighted로 설정 selecte -> highlighted 애니메이션은 배열로 선언 [.selected, .highlighted] button.setImage(UIImage(named: "play"), for: .normal) button.setImage(UIImage(named: "play-pressed"), for: .highlighted) button.s..
재시도 처리 retryWhen 사용하여 아래와 같은 상황에서 재시도 처리 Observable로 감쌓여진 API 호출로부터 error 응답을 받은 경우, 특정 시간 이후에 다시 재시도 방법? Observable에 감쌓여진 특정 로직 처리 후 error 이벤트가 발생한 경우, 특정 시간 이후 다시 재시도 방법? 사용한 프레임워크 RxSwift RxCocoa retryWhen closure를 파라미터로 받아서 해당 해당 closure가 완료되면 시도했던 로직 self로 다시 sequence로 만들어서 동작 // PrimitiveSequence.swift public func retryWhen( _ notificationHandler: @escaping (Observable) -> TriggerObservabl..
subscribe or bind 시 그만큼 해당 Observable이 create되는 것을 주의 구독만 해도 해당 Observable의 `create`가 호출되면서 스트림이 생긴다는 것을 명심할 것 테스트에 사용할 예시 API 정의 enum API { private static var count = 0 static func requestSomeAPI() -> Observable { Single.create { single in let params: [String: Any] = [ "lon": 113, "lat": 23.1, "ac": 0, "unit": "metric", "output": "json", "tzshift": 0 ] AF .request( "https://www.7timer.info/bin/..
1. RxSwift의 Map, FlatMap - 사용하여 비동기를 순서대로 처리 방법 2. RxSwift의 Map, FlatMap - 사이드 이펙트 처리 방법 (throw와 catch 사용) map과 flatMap 연산자 개념을 구분 개념 구분 flatMap은 블록 내에서 Observable을 리턴해야하므로, API를 사용할때 응답값이 Observable일때 flatMap사용 map의 리턴값은 Observable이 아니고, 사이드이펙트 처리 시 throw를 리턴하여 처리 주의사항: 스트림안에서 throw가 하나라도 방출되면, 해당 stream은 dispose되므로 사용자가 계속 재시도 할 수 있는 이벤트 처리에는 부적합한것을 주의 (예제 상황도 사용자가 계속 시도할 수 있으므로 부적합하지만 설명을 위해서..