Я попробовал это: < /p>
Код: Выделить всё
struct MainView: View {
@ObservedObject private var viewModel: MainViewModel
var body: some View {
ZStack {
....
if let alertText = viewModel.showAlert {
SimpleToast(text: alertText, bgColor: .red, textColor: .white)
}
}
}
}
@MainActor
final class MainViewModel: ObservableObject {
@Published var items: [Item]
@Published var showAlert: String?
let getAllItem: () async -> Result
func fetchAll() {
Task {
let result = await getAllItem()
if let .success(items) = result {
self.items = items
} else {
self.showAlert = "Failed to fetch items..."
}
}
}
}
< /code>
он может излучать только один раз, потому что, очевидно, ShowAlert не изменяется после того, как он изменился с первого раза. Таким образом, тост может показать только один раз.final class MainViewModel {
let itemsRelay = BehaviorRelay(value: [])
let items: Driver = itemsRelay.asDriver()
let showAlertRelay = PublishRelay()
let showAlert: Signal = showAlertRelay.asSignal()
let getAllItem: () -> Single
let disposeBag = DisposeBag()
func fetchAll() {
getAllItem()
.subscribe(to: itemsRelay)
.catchError { [weak self] _ in self?.showAlertRelay.accept("Failed to fetch items...") }
.disposed(by: disposeBag)
}
}
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/797 ... oncurrency