Shark Deng
Shark Deng

Reputation: 1078

'self' used before all stored properties are initialized SwiftUI

This is my code. Do you know what is this error? Thank you!

struct PlaceholderImageView: View {
    @ObservedObject var imageModel: PlaceholderImageViewModel
    @Environment(\.MyImageCacheValue) var cache: MyImageCache
    
    init(urlString: String) {
        imageModel = PlaceholderImageViewModel(urlString: urlString, cache: cache) // error: 'self' used before all stored properties are initialized
    }
    
    var body: some View {
        Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
    }
}

Upvotes: 0

Views: 81

Answers (1)

Cuneyt
Cuneyt

Reputation: 981

You are trying to initialize PlaceholderImageViewModel before MyImageCache is initialized. One way to resolve this is to create PlaceholderImageViewModel in the caller view of PlaceholderImageView and just pass the model directly.

struct PlaceholderImageViewSuperView: View {

    @Environment(\.MyImageCacheValue) var cache: MyImageCache

    var body: some View {
        NavigationLink("Go to image view", destination: PlaceholderImageView(imageModel: PlaceholderImageViewModel(urlString: urlString, cache: cache)))
    }
}

struct PlaceholderImageView: View {

    @ObservedObject var imageModel: PlaceholderImageViewModel

    var body: some View {
        Text("Any text here")
    }
}

Upvotes: 1

Related Questions