我如何初始化@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 数据类型
我似乎无法弄清楚如何初始化数组类型的@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 数据类型