[iOS] Combine - Data Binding

Zoe·2023년 12월 26일
0

iOS

목록 보기
36/39

Combine을 이용해 데이터를 UI에 바인딩하는 흐름은 아래와 같다.

🌟Publisher 생성: 데이터 소스로부터 데이터를 방출하는 Publisher를 생성
🌟Subscriber 연결: 이 Publisher를 UI 컴포넌트에 연결하는 Subscriber를 설정
🌟Data 변환 및 처리: 필요에 따라 map, filter, combineLatest 등의 연산자를 사용하여 데이터를 변환 및 조합
🌟Main Thread에서 UI 업데이트

주로 SwiftUI에서 viewModel과 view를 다음과 같이 바인딩한다.

import SwiftUI
import Combine

// ObservableObject를 구현한 ViewModel
class ViewModel: ObservableObject {
    @Published var text: String = ""
}

struct MainView: View {
    @ObservedObject var viewModel = ViewModel()

    var body: some View {
        TextField("text", text: $viewModel.text)
        Text("You entered: \(viewModel.text)")
    }
}

그렇다면 UIKit과 Combine은 어떻게 상호작용할까?
UIKit에서는 AnyCancellable을 사용하여 데이터를 바인딩한다.

import UIKit
import Combine

class ExampleViewController: UIViewController {
    private var textField: UITextField!
    private var label: UILabel!
    private var cancellables = Set<AnyCancellable>()

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()

        // UITextField의 텍스트 변경을 감지하는 Publisher 설정
        let publisher = NotificationCenter.default.publisher(for: UITextField.textDidChangeNotification, object: textField)
            .map { ($0.object as! UITextField).text ?? "" }

        // Publisher를 UILabel에 바인딩
        publisher
            .assign(to: \.text, on: label)
            .store(in: &cancellables)
    }

    private func setupUI() {
        // UI 초기화 및 레이아웃 
    }
}

위 예제에서는 NotificationCenter를 사용하여 UITextField의 변경 사항을 감지하는 publisher를 만들고, assign(to:on:)을 사용하여, 이를 UILabel의 text 속성에 바인딩한다. cancellables 는 subscription을 유지 관리하는 데 사용한다.

profile
iOS 개발자😺

0개의 댓글

관련 채용 정보