我如何初始化@Binding SwiftUi

How Do I Initialize @Binding SwiftUi

我似乎无法弄清楚如何初始化数组类型的@Binding:

struct RecipeItemDetailView: View {

@Binding var recipeDetails: [StoredRecipeModel]

var body: some View {
    NavigationView {
        VStack {
            Text(recipeDetails[1].name)
        }
    }
}

struct RecipeItemDetailView_Previews: PreviewProvider {
    static var previews: some View {
        RecipeItemDetailView(recipeDetails: <#Binding<[StoredRecipeModel]>#>)
}

在上面,您会看到在 PreviewProvider 中的“recipeDetails:”之后要求我初始化 recipeDetails。我把示例代码放在要求的地方。我能够初始化不太复杂的绑定(例如 .constant(false) ),但在这种情况下不起作用。

有什么想法吗?

希望我在这里使用了正确的术语,因为我对编程还很陌生!

更新:我能够弄明白。以下代码似乎有效:

struct RecipeItemDetailView_Previews: PreviewProvider {
static var previews: some View {
    RecipeItemDetailView(recipeDetails: .constant([StoredRecipeModel].init()))
}

SwiftUI Binding 类型包含一个名为 .constant() 的方法。您声称 .constant() 在这种情况下不起作用,但实际上可以创建任何类型的虚拟绑定数据。

解决方案

您需要初始化 StoredRecipeModel 的新实例,并将其作为参数传递给 .constant()。下面的代码片段编译没有问题,因为它创建了一个 Binding 类型的 [StoredRecipeModel],一个自定义类型的数组 StoreRecipeModel.

struct StoredRecipeModel {
       var name: String
}
RecipeItemDetailView(recipeDetails: .constant([StoredRecipeModel(name: "Food")]))

您更新后的答案确实编译无误,但它是一个已初始化的空列表。我怀疑这就是您想要的,因为它不会在屏幕上显示任何内容。

首先,Bindings当我们想在不同的地方共享值时使用,当值改变时,共享变量将被连接并同时接收更新.现在在这种情况下,如果我们想通过传递 Binding 值来构建用户界面原型,但我们没有要绑定的实际变量,我们可以使用 .constant ,作为预览的绑定变量。

要点:

  • 绑定 .constant 值是硬编码的,因此不能 改变了。
  • 它始终是只读的,.constant 就是这样 有效。
  • 一旦你有了真实数据,你可以替换.constant并传递一个 常规 绑定 值。
  • 它支持所有 Swift 数据类型