';自我';在初始化所有存储属性之前使用SwiftUI

';自我';在初始化所有存储属性之前使用SwiftUI,swiftui,Swiftui,这是我的密码。你知道这是什么错误吗?谢谢大家! struct PlaceholderImageView: View { @ObservedObject var imageModel: PlaceholderImageViewModel @Environment(\.MyImageCacheValue) var cache: MyImageCache init(urlString: String) { imageModel = Placeholde

这是我的密码。你知道这是什么错误吗?谢谢大家!

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@*/)
    }
}

在初始化
MyImageCache
之前,您正在尝试初始化
Placeholder ImageViewModel
。解决此问题的一种方法是在
PlaceholderImageView
的调用者视图中创建
PlaceholderImageViewModel
,然后直接传递模型

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")
    }
}