【问题标题】:How Do I Initialize @Binding SwiftUi我如何初始化@Binding SwiftUi
【发布时间】:2021-07-14 05:32:06
【问题描述】:

我似乎不知道如何初始化数组类型的@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) ),但在这种情况下不起作用。

有什么想法吗?

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

【问题讨论】:

  • 嗯,您需要以某种方式 为预览提供一些要显示的虚拟数据,对吧?您希望预览显示哪些虚拟数据?
  • 您可能认为.constant 只能用于创建布尔绑定。但事实并非如此。您可以将任何 Swift 数据类型传递给方法 .constant(),因为它接受一个泛型参数。话虽如此,请查看并接受我的回答。

标签: arrays swift xcode swiftui binding


【解决方案1】:

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

解决方案

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

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

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

【讨论】:

  • 这很好用!我非常感谢详细的解释,因为这样可以更清楚地了解 PreviewProvider 中的实际情况
【解决方案2】:

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

要点:

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

【讨论】:

    【解决方案3】:

    更新:我能够弄清楚。以下代码似乎可以工作:

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

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2020-11-10
      • 2019-11-20
      • 2021-09-26
      • 2020-03-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多