diff --git a/KkuMulKum/Resource/ObservablePattern/ObservablePattern.swift b/KkuMulKum/Resource/ObservablePattern/ObservablePattern.swift index fb6a1aa8..a6829897 100644 --- a/KkuMulKum/Resource/ObservablePattern/ObservablePattern.swift +++ b/KkuMulKum/Resource/ObservablePattern/ObservablePattern.swift @@ -10,42 +10,61 @@ import Foundation class ObservablePattern { var value: T { didSet { - listener?(value) + notifyListeners(value) } } - private var listener: ((T) -> Void)? + typealias Listener = (T) -> Void + + private var listeners: [Listener] = [] init(_ value: T) { self.value = value } + private func notifyListeners(_ value: T) { + for listener in listeners { + listener(value) + } + } + func bind(_ listener: @escaping (T) -> Void) { - self.listener = listener + listeners.append(listener) + + listener(value) } func bind(with object: Object, _ listener: @escaping (Object, T) -> Void) { - self.listener = { [weak object] value in + listeners.append { [weak object] value in guard let object else { return } listener(object, value) } + + listener(object, value) } func bindOnMain(_ listener: @escaping (T) -> Void) { - self.listener = { value in + listeners.append { value in DispatchQueue.main.async { listener(value) } } + + DispatchQueue.main.async { + listener(self.value) + } } func bindOnMain(with object: Object, _ listener: @escaping (Object, T) -> Void) { - self.listener = { [weak object] value in + listeners.append { [weak object] value in guard let object else { return } DispatchQueue.main.async { listener(object, value) } } + + DispatchQueue.main.async { + listener(object, self.value) + } } } - diff --git a/KkuMulKum/Source/Promise/ServiceProtocol/PromiseServiceProtocol.swift b/KkuMulKum/Source/Promise/ServiceProtocol/PromiseServiceProtocol.swift index 10babaad..01273917 100644 --- a/KkuMulKum/Source/Promise/ServiceProtocol/PromiseServiceProtocol.swift +++ b/KkuMulKum/Source/Promise/ServiceProtocol/PromiseServiceProtocol.swift @@ -26,4 +26,3 @@ protocol PromiseServiceProtocol { func deletePromise(promiseID: Int) async throws -> ResponseBodyDTO? func exitPromise(promiseID: Int) async throws -> ResponseBodyDTO? } -