SwiftUI:使用绑定初始化@StateObject

nxowjjhe  于 2023-06-04  发布在  Swift
关注(0)|答案(3)|浏览(170)

在我的init()中,我试图通过传入一个绑定到作用域中的另一个变量来初始化一个@StateObject变量。
我想实现这样的目标:

struct MyView: View {
    @State var value: Bool
    @StateObject var viewModel: ViewModel

    init() {
        self.value = false
        self.viewModel = ViewModel($value)
    }
}

我知道,当在初始化过程中需要属性时,我们可以创建它们的副本并在初始化器中使用该副本。然而,由于我试图使用绑定,绑定到变量的副本将不起作用。
我如何才能做到这一点?谢谢你!

db2dz4w8

db2dz4w81#

这个有用吗这样,您就可以将属性值存储在ViewModel内部,然后您可以在以后使用该值,例如$viewModel.value

struct MyView: View {    
    @StateObject private var viewModel: ViewModel
    init() {
        _viewModel = StateObject(wrappedValue: ViewModel(value: false))
    }
}
acruukt9

acruukt92#

如果value无论如何都绑定到视图模型,则更好的做法是在视图模型中将其声明为@Published属性

class ViewModel : ObservableObject {
    @Published var value = false
}

struct MyView: View {
    @StateObject var viewModel = ViewModel()

    var body: some View {
        Toggle("Switch something", isOn: $viewModel.value)
    }
}
fykwrbwg

fykwrbwg3#

chuan322的答案是一个很好的答案,但你可以修改一下如下:

struct MyView: View {
    @State var value: Bool
    @StateObject var viewModel: ViewModel

    init(value: Bool) {
        self.value = value
        _viewModel = StateObject(wrappedValue: ViewModel(value: value))
    }
}

相关问题