전체 글

 iOS developer.
· iOS/RxSwift
Observable은 create할 때부터, 어떻게 데이터를 방출할지 정해져 있는 시퀸스입니다. create된 Observable을 subscribe함으로써 observer는 값을 받거나 받은 값을 가공할 수만 있는 read-only와 같습니다. Subject는 Observable이자 Observer역할을 모두 할 수 있고, create 이후에도 Observable의 외부에서 동적으로 원하는 값을 추가할 수 있는 시퀀스입니다. Subject에는 PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject가 있는데, 주로 PublishSubject, BehaviorSubject가 많이 쓰입니다. 하나씩 정리해보겠습니다. PublishSubject 이름과 같이..
· iOS/RxSwift
Observable은 next, completed, error 세 가지 이벤트를 방출하는 타입인데요. 하지만 항상 저 세 가지 이벤트가 모두 필요한 것은 아닙니다. 그래서 RxSwift는 상황에 맞는 Observable의 변형들을 제공하는데 이를 Traits(특성)이라고 합니다. Single, Completable, Maybe 이렇게 세가지 Traits가 있습니다. Observable을 사용해도 되지만, 이 Traits들은 이름을 읽고서 좀 더 쉽게 흐름을 파악할 수 있도록 해 주고, API를 읽는 사람들에게 코드의 의도를 명확하게 전달하는 방법을 제공하는 것이 목적입니다. Single Single은 success(value), failure(error) 이벤트만 방출시킵니다. (error(error)이..
· iOS/RxSwift
Observable의 생성 Operator 마지막 글입니다(아마도). 첫번째 글에서는 just, of, from, range, empty, never 를 정리했고 두번째 글에서는 create를 정리했습니다. 이번에도 이전에 정리한 생성 Operator와 또다른 성격의 defer를 해봅니다. deferred defer로 생성된 observable은 다른 생성 operator들과 다르게, observer가 subscribe를 호출하면 그 때부터 observable을 생성시킵니다. 그래서 defer는 subscribe할 때마다 다른 observable을 생성시키는 Factory를 구현할 수 있습니다. print("----- deferred -----") let disposeBag = DisposeBag() /..
· iOS/RxSwift
이전 글에서는 Observable을 생성할 수 있는 just, of, from, range, empty, never operator들을 정리해봤습니다. 이번 글에서도 이어서 생성 operator를 정리해보려고 하는데, 앞서 정리한 것들과는 조금 다른 operator들을 다뤄봅니다. Create RxSwift의 Lifecycle을 정리한 글에서 Observable이 next, completed, error 이벤트를 방출시키는 타입이라고 했죠. Create는 각 이벤트들을 방출시키는 onNext, onCompleted, onError 를 직접 구현하는 방식입니다. print("----- create (1) -----") Observable.create { observer -> Disposable in obs..
· iOS/RxSwift
RxSwift의 Lifecycle 중에서 가장 앞단계인 Observable의 생성을 위한 Operator들을 간단히 정리해봅니다. Just 단 하나의 Next이벤트로 Element를 방출하고 종료하는 Observable 시퀀스를 생성합니다. print("----- just(1) -----") Observable.just(1) // 1을 방출하는 Observable을 생성하는 just .subscribe(onNext: {// just가 방출시킨 값을 print하는 subscribe print($0) }) (출력) ----- just(1) ----- 1 를 생략하여도, just의 타입추론으로 Observable 타입으로 반환됩니다. Just로 여러개의 값을 방출시키고 싶다면 배열로 내보내면 됩니다. prin..
· iOS/RxSwift
지난 포스팅에서 정리한 Lifecycle을 ReactiveX 공식 사이트(https://reactivex.io)에서는 마블다이어그램(Marble Diagram)을 사용해서 설명하고 있습니다. 이 마블다이어그램을 잘 이해하면, Rx의 여러 Operator의 흐름을 이해하는데 도움이 됩니다. 마블다이어그램에서 각 상징들이 어떤 의미인지 설명하는 포스팅을 정리해봅니다. 화살표 라인은 Observable을 나타내고, 왼쪽에서 오른쪽으로 시간이 흘러감을 표현해줍니다. 화살표에 그려진 원(Marble)들은 Observable이 값(1, 2, 3, ...)을 방출시키는 next이벤트를 의미합니다. Observable에서 세번의 이벤트(tap)을 방출하고 나오는 세로선은 정상적으로 종료된 completed이벤트를 의미..
· iOS/RxSwift
RxSwift의 기본 요소 1. Observable Observable 형태로 사용되며, Element는 방출(emit)하고자 하는 타입입니다. Subscribe된 후 시간이 지남에 따라 유한, 무한의 이벤트를 방출하는 객체입니다. 유한의 이벤트는 URLSession을 통한 데이터 패치 이벤트가 예시가 될 수 있고, 무한의 이벤트는 사용자의 응답을 기다리는 UI의 이벤트가 예시가 될 수 있습니다. next, error, completed 이벤트를 방출합니다. next: 최신, 혹은 다음 Element와 함께 방출되는 이벤트입니다. error, completed 이벤트가 방출되기 전까지 계속 Element가 방출될 수 있습니다. completed: 성공적으로 이벤트 시퀀스가 종료됐다는 의미입니다. Obse..
· iOS/RxSwift
RxSwift에 대해 정리해보려고 합니다. RxSwift에 대한 글은 곰튀김님 강의, Raywenderlich 등이 참고되었습니다. RxSwift는 Observerble stream(=시퀀스)을 통해 (Swift로)비동기 프로그래밍을 하기 위한 라이브러리입니다. (https://reactivex.io : An API for asynchronous programming with observable streams) 애플은 비동기 프로그래밍 지원을 위해 많은 API를 제공합니다. NotificationCenter, Delegate Pattern, GCD, 클로저 등. + iOS13부터는 Combine까지. 우리는 iOS 앱을 개발하는 환경에서 매우 다양한 비동기 프로그래밍을 하게 되는데요. 여러 REST AP..
· Dev Tips
Xcode14에서 생성한 프로젝트에서 pod init을 하려하니 아래와 같은 에러가 발생하며 Podfile이 생성되지 않는 이슈가 있습니다. RuntimeError - [Xcodeproj] Unknown object version (56). /opt/homebrew/Cellar/cocoapods/1.11.3/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:228:in `initialize_from_file' /opt/homebrew/Cellar/cocoapods/1.11.3/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:113:in `open' /opt/homebrew/Cellar/cocoapods/1...
· iOS/Swift
바로 이전 글에서 정리했던 ViewModifier 프로토콜과 유사하게ButtonStyle 이라는 프로토콜이 있습니다.이 프로토콜로 작성한 구조체는SwiftUI Button의 .buttonStyle() modifier를 통해 ButtonStyle을 설정할 때 쓸 수 있습니다. 간단한 예제입니다.ButtonStyle 프로토콜의 구조체는func makeBody(configuration:) -> some view 를 구현해주면 됩니다.struct CustomButtonStyles: ButtonStyle { var systemName: String var title: String func makeBody(configuration: Configuration) -> some View { ..
· iOS/Swift
ViewModifier 프로토콜은'View 혹은 View Modifier에 적용해서 기존과 다른 버전을 생성하는 프로토콜' 입니다.다시말해 커스텀 Modifier를 만들 수 있게 해주는 프로토콜입니다. 간단한 예시로 보겠습니다.아래와 같이 ViewModifier 프로토콜을 작성해줍니다.저는 제 앱에서 공통으로 사용할 타이틀 크기와 색상을 지정해주었습니다.struct MyAppTitle: ViewModifier { func body(content: Content) -> some View { return content .font(.system(size: 30, weight: .bold)) .foregroundColor(.indigo) }}  그리..
· Dev Tips
집에서는 M1 Pro 맥북을 사용중이고, 최근 회사에서는 M1 iMac을 사용중인데요. 실리콘 환경에서의 빌드에서 문제가 가끔 발생하여, 이를 해결한 케이스들을 정리해봅니다. (이 글은 추가 케이스가 생길 때 업데이트될 수 있습니다) (마지막 업데이트: 2023.01.17) #1 외부 framework는 가급적 xcframework를 쓰는 것이 좋음. 기존 lipo로 묶는 유니버셜framework는 arm단말용 바이너리+arm시뮬레이터용 바이너리가 묶일수가 없음. carthage는 0.37.0부터 xcframework를 지원. #2 터미널(혹은 iterm)을 쓰는 경우 homebrew, npm, pods 등 패키지관리자 설치시 문제가 발생할 수 있는데, 실행할 때 로제타로 실행한 후 설치하면 해결. (앱..
SwiftyCody
 iOS.dev