Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스유
- composable architecture
- TCA
- 영남대
- 후기
- 알고리즘
- 1일1알골
- 멋쟁이사자처럼
- dispatchqueue
- uikit
- swift concurrency
- widgetkit
- 웹
- Swift
- 문법
- cs
- 운영체제
- widget
- 리액트
- 위젯킷
- 대외활동
- 스위프트
- 멋사
- 컴퓨터그래픽스
- SwiftUI
- 백준
- spritekit
- c++
- 네트워크
- Protocol
Archives
- Today
- Total
맛동산이
Combine과 Rx가 잘 이해가 안가는 사람을 위한 설명(feat. SwiftUI에 비유해서) 본문
Combine을 처음 공부할때 가장힘들었던점
콤바인, rx모두 같은 맥락으로 처음 공부할때 힘든점은
그래서 subscriber, publisher가 뭔지는 알겠는데 어떻게 생성하는가? 이다.
따라서, 최대한 쉽게 나만의 해석을 하고 이해하여서 설명해보려고 한다.
Combine을 사용하는 이유
우선 콤바인을 사용하는 이유를 이해 해야하는데, 콤바인을 사용하는 이유는 공식문서에 나와있다.
하지만 내가 생각하는 combine이나 rx를 사용하는 이유는 바로 데이터 바인딩을 하기 위함이다.
데이터 바인딩을 한다는 말은, 뷰에 있는 어떠한 컴포넌트(textfield, button, text..)에 이벤트 감지를 하고, 감지를 통해서 다시 어떠한 값의 변경을 이끌어 내는것을 의미한다
나는 이러한 방법에서 combine을 이해하려고 하니 좀 쉬웠다.
예를들어 다음과 같은것이다.
예시)
기본적으로 mvvm패턴에서 사용한다고 가정하고, SwiftUI에서 View와 ViewModel이 있다고 가정한다.
struct View: View {
@StateObject var vm = SomeViewModel()
var body: some View {
{Button,과 TextField가 있는 뷰}
}
}
import Combine
class SomeViewModel: ObservableObject {
@Published var textfieldInput = ""
@Published var buttonClicked = false
var cancallables = Set<AnyCancallable>
//혹은 init을 직접 파라미터를 추가하는 방식으로 해도 된다. (상위 뷰에서 데이터를 전달해줄때)
init() {
makeTextFieldSubscribe()
makeButtonSubscribe()
}
func makeTextFieldSubscribe() {
$textfieldInput
.sink {
//어떠한 변경을 해준다던지, 네트워킹을 해준다던지 하자
}.store(in: &cancallables)
}
func makeButtonSubscribe() {
$buttonClicked
.sink {
print("hello")
}.store(in: &cancallables)
}
}
이러한 방식으로 textField와 buttonClicked라는 변수 자체에 subscribe를 붙이는 것으로 I/O입력은 뷰에서 처리해주고, 해당 처리된 값의 변경을 VM에서 감지하도록 해주는 방법이다.
뷰에서는 위의 변경을 또 인식하여, 어떠한 변경을 처리해준다던지 하는 방법이 내가 생각하는 combine을 이용하는 법이다.
반응형
'앱 > Swift' 카테고리의 다른 글
Swift) RxDataSource 사용하는법 정리 (0) | 2024.02.25 |
---|---|
Swift) URLSession, async await을 사용하여(parameter, header, body 세팅까지) (0) | 2024.02.25 |
Swift) NSAttributedString, NSMutableAttributedString (1) | 2024.01.01 |
UIKit) lineBreakMode에 대해서 (1) | 2024.01.01 |
UIKit) Then을 사용해보자 (0) | 2024.01.01 |