EitherEither는 주로 두 가지 케이스 중 하나의 타입을 갖도록 하는 표현 방식이다.Either는 enum으로 구현할 수 있으며, 대표적으로 자주 사용하는 Result 타입이 있다. 예를 들어, 성공적인 결과와 실패한 결과를 구분하여 반환하는 Result 타입이 있다.Result는 반환될 때 결과가 성공이어서 특정 타입으로 반환되는 경우뿐만 아니라, 실패하여 특정 에러를 반환해야 하는 경우가 있기 때문에 특정 타입 또는 에러로 반환하기 위해 Either라는 개념을 활용한다. Either의 정의enum Either { case left(L) case right(R)} 만약 위의 코드를 enum이 아닌 struct로 구현하게 된다면 'L 이면서 R' 또는 'L과 R이 둘 다 아님'과 같은 ..
Swift
Swift 관련Disposable Observable의 라이프사이클이 Completed event나 Error event로 종료되면 모든 리소스를 정리하고 Dispose 된다. Combine의 AnyCancellable과 유사한 개념이다. Dispose가 수행되는 시점은 아래의 코드와 같이 작성하면 확인할 수 있다. let s = Observable.from([1, 2, 3]) .subscribe(onNext: { elem in print("Next", elem) }, onError: { error in print("Error", error) }, onCompleted: { print("Completed") }, onDisposed: { print("Disposed") }) onDispose는 어떤 이벤트에 대한 em..
RxSwift에서 데이터의 전달을 위해서 Observable과 Observer라는 개념이 등장한다. Observable 이름 그대로 '관측 가능한' 객체를 의미하며, 다양한 방식으로 데이터를 비동기적으로 전달하는 역할을 수행한다. Combine에서 Publisher와 유사한 개념이며, 하나 이상의 Observer가 실시간으로 이벤트에 반응할 수 있도록 새 값을 방출(emit)한다. Emission Observable이 이벤트를 방출하는 것을 Emission이라고 한다. Next 이벤트 수행을 통해 다양한 값을 전달하며, 라이프사이클 내에 한 번도 수행되지 않을 수도 있다. Completed / Error Observable의 라이프사이클 가장 마지막에 수행되는 작업이며, Emission이 아니라 일종의 ..
드래그 가능한 그리드를 만드는 것을 연습해보았다. 아마도 온리픽원 새로운 기능에 추가될 수 있을 것 같다. 우선 SwiftUI View를 하나 추가해서 여러 가지 색깔의 View를 그리드에 나타낸다. import SwiftUI struct MovableGridView: View { @State private var colors: [Color] = [.red, .blue, .green, .purple, .orange, .yellow, .brown, .cyan, .indigo, .mint, .pink, .black] var body: some View { ScrollView(.vertical) { let columns = Array(repeating: GridItem(spacing: 10), count: 3..
SwiftUI의 버튼을 커스텀해서 성공과 실패에 대한 애니메이션을 나타내는 예제다. 먼저 커스텀 버튼을 만든다. 임시로 버튼을 body 안에 작성하고 test를 출력하는 custom button으로 만들었다. import SwiftUI struct AnimatedButton: View { var body: some View { Button { print("test") } label: { Text("custom button") } } 다음으로 버튼을 나타낼 뷰를 먼저 작성한다. import SwiftUI struct AnimatedButtonView: View { var body: some View { AnimatedButton() } } struct AnimatedButtonView_Previews: P..