在 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 输入参数显式传入或来自Identifiableid 属性)在需要时区分List更新,以便仅修改受更新模型影响的行。例如,id 也用于删除行。

以上是关于在 VStack 中使用列表时获取“表达式类型在没有上下文的情况下不明确”的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI,删除VStack中视图之间的空间?

SwiftUI之HStack和VStack的切换

SwiftUI之HStack和VStack的切换

VStack 中 FrameHeight 低于 1 不准确

SwiftUI NavigationView 背景颜色

SwiftUI:防止视图在 VStack 内展开