Я возился с кодом Combine и Swift UI и столкнулся с этой проблемой. Фактически я хочу передать Publisher
в View
и получать View
обновление каждый раз, когда издатель публикует обновление.
Вот примерная площадка, которая не компилируется. Вместо этого он выдает ошибку - Escaping closure captures mutating 'self' parameter
в строке .sink(...
.
import Combine
import SwiftUI
struct MyView: View {
let cancellable: AnyCancellable
@State var current: Int = 0
init<P>(publisher: P) where P: Publisher, P.Output == Int, P.Failure == Never {
cancellable = publisher.sink { value in
self.current = value
}
}
var body: some View {
Text("\(current)")
}
}
let subject = PassthroughSubject<Int, Never>()
let x = MyView(publisher: subject)
subject.send(5)
В настоящее время я изменил код, чтобы использовать модель представления ObservableObject
со значением внутри нее и указанием этому объекту отправить обновление. Но мне интересно, как другие решили эту проблему, так как я бы тоже хотел вариант без представления модели.
Что вы наделали, ребята?