MutableStateFlow(Kotlin) -> CurrentValueSubject(swift)
안드로이드 앱에서 MutableStateFlow를 사용하고
이 stateFlow를 Observing하여 항상 최신의 데이터로 view를 뿌려주고 있었음
이와 같은 동작을 하는 Observable객체가 있는지 알아 봄
바로 Combine에 포함된 객체가 이와같은 동작을 함
https://developer.apple.com/documentation/combine
Combine | Apple Developer Documentation
Customize handling of asynchronous events by combining event-processing operators.
developer.apple.com
모든 걸 지금 알아볼 수는 없고
필요한 내용만 정리하겠음
Observe 할 수 있는 객체가 Swift에는 몇 가지가 있는데 그 중
ObservableObject와 CurrentValueSubject가 있음
ObservableObject
ObservableObject는 UI에 직접 연결하여 UI가 변화를 감지하여 바로바로 업데이트를 하는 객체라고 하면
CurrentValueSubject
CurrentValueSubject는 Kotlin의 Flow와 같이 사용자가 직접 컨트롤 해줘야하는 단점이 있지만, UI에 종속되지 않아 앱의 근데 상태 관리나 일반적으로 사용하기에 더 적합하다고 볼 수 있음
Firebase와 같이 비동기 처리를 하기에는 CurrentValueSubject가 더 적절하다고 함
그렇다면, 두가지를 모두 활용해서 비동기 처리 및 UI업데이트를 하는 방법이 가장 적절할 것으로 보임
예제)
class DataSOurce: ObservableObject{
@Published var issueData: [String: [String: IOSData]] = [:]
var apiData = CurrentValueSubeject<[String: [String: IOSData]]>, Never>([:])
private var cancellables = Set<AnyCancellable>()
init(){
apiData
.sink{ newData in
DispatchqUEUE.main.async{
self.issueData = newData
}
}
.store(in: &cancellables)
}
func updateIssueData(for key: String, newData: [String: IOSData]){
apiData.send(newData)can
}
}