Post

Replies

Boosts

Views

Activity

[SwiftUI] We can't inject @StateObject since it's read-only
@StateObject is read-only, so we can't inject it. The next block of code shows how we could inject 2 presenters through the init, which are then assigned to a @StateObject variable and a @ObservedObject variable. Notice: Assigning a value directly to a @StateObject works fine. (presenterStateWorking). Injecting a presenter that is then assigned to a @StateObject doesn't work. Throws an error in the init. (presenterStateNotWorking). Injecting a presenter that is then assigned to a @ObservedObject works fine. (presenterObserved). /* (You can drop this chunk of code in a playground) */ import SwiftUI import PlaygroundSupport class Presenter: ObservableObject {     @Published var viewModel = ViewModel(number: 42) } struct ViewModel: Equatable {     let number: Int } struct ContentView: View {     @StateObject var presenterStateWorking = Presenter()     @StateObject var presenterStateNotWorking: Presenter     @ObservedObject var presenterObserved: Presenter     init(presenter1: Presenter, presenter2: Presenter) {         self.presenterStateNotWorking = presenter1 /* (error thrown on this line) */         self.presenterObserved = presenter2     }     var body: some View {         VStack {             Text("Hi 🍎 Engineer 😊")                 .padding()         }     } } let view = ContentView(presenter1: Presenter(), presenter2: Presenter()) PlaygroundPage.current.liveView = UIHostingController(rootView: view) (Feedback issue number: FB7774103)
7
0
7.4k
Jun ’20