在 VStack 中使用列表时获取“表达式类型在没有上下文的情况下不明确”
Posted
技术标签:
【中文标题】在 VStack 中使用列表时获取“表达式类型在没有上下文的情况下不明确”【英文标题】:Getting "Type of expression is ambiguous without context" when using list inside of VStack 【发布时间】:2021-05-06 10:01:51 【问题描述】:所以我在 VStack 中使用了一个列表视图,并且遇到了一个问题,即“表达式的类型在没有更多上下文的情况下不明确”。当我开始通过 Firestore 而不仅仅是硬编码值填充数据时,这个问题就开始出现了。我已经简化了我的代码以显示我如何使用下面的列表的结构。
import SwiftUI
import FirebaseAuth
import FirebaseFirestore
struct MainView: View
@State private var radius = 300
private var name = "Name"
@ObservedObject private var viewModel = TaskViewModel()
let db = Firestore.firestore()
init() UITableView.appearance().backgroundColor = .clear
UITableView.appearance().isScrollEnabled = false
var body: some View
return NavigationView(content:
VStack
Spacer()
.frame(height: 150)
List(viewModel.task) item in
VStack(alignment: .leading)
Image(systemName: item.completedIcon)
Text(item.title).font(Font.custom("Permanent Marker", size: 18))
.navigationBarTitle("Tasks")
.onAppear()
self.viewModel.fetchData()
.frame(width: 318, height: 404, alignment: .center)
.shadow(radius: 7)
.cornerRadius(25.0)
.listRowBackground(Color.white)
)
任何帮助将不胜感激
【问题讨论】:
您需要提供有关 viewModel.task 的更多详细信息。您的问题很可能是List(viewModel.taks)
【参考方案1】:
问题来了
List(viewModel.taks)
确保您的自定义模型符合
struct Task:Identifiable
或添加 id 属性
List(viewModel.taks, id: \.id) item in
【讨论】:
哦。是的,我没有使任务可识别。如果您不介意解释,为什么 id 对于列表很重要? 它是一种使循环有效的方法,无论是 id 还是可识别的 @DayemSaeed SwiftUI 使用id
属性(作为id
输入参数显式传入或来自Identifiable
的id
属性)在需要时区分List
更新,以便仅修改受更新模型影响的行。例如,id
也用于删除行。以上是关于在 VStack 中使用列表时获取“表达式类型在没有上下文的情况下不明确”的主要内容,如果未能解决你的问题,请参考以下文章