无法推断复杂的闭包返回类型;添加显式类型以消除Swift UI的歧义

无法推断复杂的闭包返回类型;添加显式类型以消除Swift UI的歧义,swift,swiftui,Swift,Swiftui,当我在视图中保留foreach循环时,我得到一个错误,该错误表示视图“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”。当我将foreach循环移出视图时,它工作得很好。当我在一个对象上实现循环时,我刚开始出现这个错误,然后我循环直到某个数字将“伪字符串”传递到ExerciseTableRow视图中。我不知道该怎么解决这个问题。提前谢谢你 struct PassedExerciseCard: View { var exercise : String var sets : [E

当我在视图中保留foreach循环时,我得到一个错误,该错误表示视图“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”。当我将foreach循环移出视图时,它工作得很好。当我在一个对象上实现循环时,我刚开始出现这个错误,然后我循环直到某个数字将“伪字符串”传递到ExerciseTableRow视图中。我不知道该怎么解决这个问题。提前谢谢你

struct PassedExerciseCard: View {
    var exercise : String
    var sets : [ExerciseSet]
    
    var body: some View {
        
        VStack{
            Text(exercise).font(.title).padding(.bottom, 5)
            Group{
                HStack{
                    Group{
                        Text("Set")
                        Text("Weight")
                        Text("Reps")
                    }.padding(.horizontal, 30)
                    .offset(x: -15, y: -5)
                    
                }
                VStack{
                    ForEach(sets, id: \.self){ (set : ExerciseSet) in
                        ExerciseTableRow(set: set.set, readOnly: true, setWeight: set.weight, setReps: set.reps)
                    }
                }.padding(.bottom, 5)
            }.offset(x: 20, y: 0)
            
            
        }
        .padding()
        .background(Color.offWhite)
        .cornerRadius(20)
        .shadow(color: Color.black.opacity(0.2), radius: 10, x:10, y:10)
        .shadow(color: Color.white.opacity(0.7), radius: 10, x:-5, y:-5)
        .padding(.vertical)
    }
}

struct PassedExerciseCard_Previews: PreviewProvider {
    
    static var exercise :[ExerciseSet] = []
    
    static var previews: some View {
        PassedExerciseCard(exercise: "Bench", sets: exercise)
    }
}
更新

我知道我犯的错误根本不是错误。实际的错误是编译器认为我没有作为NSManagedObject的ExerciseSet的属性。我更新了对象以获得一个想法,并更新了foreach循环以使用每个元素的特定ID作为标识符,但仍然没有成功

更新代码:

struct PassedExerciseCard: View {
    var exercise : String
    var sets : [ExerciseSet]
    
    var body: some View {
        
        VStack{
            Text(exercise).font(.title).padding(.bottom, 5)
            Group{
                HStack{
                    Group{
                        Text("Set")
                        Text("Weight")
                        Text("Reps")
                    }.padding(.horizontal, 30)
                    .offset(x: -15, y: -5)
                    
                }
                VStack{
                    ForEach(sets, id: \.exerciseSetId){ set in
                        ExerciseTableRow(set: set.set, readOnly: true, setWeight: set.weight, setReps: set.reps)
                    }
                }.padding(.bottom, 5)
            }.offset(x: 20, y: 0)
            
            
        }
        .padding()
        .background(Color.offWhite)
        .cornerRadius(20)
        .shadow(color: Color.black.opacity(0.2), radius: 10, x:10, y:10)
        .shadow(color: Color.white.opacity(0.7), radius: 10, x:-5, y:-5)
        .padding(.vertical)
    }
}
NSManagedObject实体:

import Foundation
import CoreData


extension ExerciseSet {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<ExerciseSet> {
        return NSFetchRequest<ExerciseSet>(entityName: "ExerciseSet")
    }

    @NSManaged public var reps: Int16
    @NSManaged public var set: Int16
    @NSManaged public var weight: Int16
    @NSManaged public var exerciseSetId: UUID?
    @NSManaged public var origin: Exercise?

}

发生错误的原因是数据类型之间不匹配:

extension ExerciseSet {
    ...
    @NSManaged public var reps: Int16
    @NSManaged public var set: Int16
    @NSManaged public var weight: Int16
    ...
}
但是在
ExerciseTableRow
中,它们属于
Int
类型:

var set : Int
var setWeight : Int
var setReps : Int
将它们更改为
Int16
,它将工作:

var set : Int16
var setWeight : Int16
var setReps : Int16

什么是例外集?为什么您认为
\.self
是这里的有效id?是否存在要传递给ExerciseTableRow的正确类型的execiseSet.set?简化,简化,简化,并找到导致错误的最小块。然后问题通常会被发现?导致错误的代码块是ForEach循环。ExerciseSet是一个NSManagedObject,当我将我的foreach循环设置为:foreach(sets,id:\.self){ExerciseTableRow中的set(set:set.set,readOnly:true,setWeight:set.weight,setReps:set.reps)}时,它抛出一个错误“类型为'NSManagedObject'的值没有成员'reps'”但是,当我像在上面的代码中那样设置foreach循环时,它会抛出title
exerciseSetId
中所述的其他异常,这是可选的。可选的不是ID类型。如果你想迭代一个列表,你需要确保每个元素都有一个ID,并且它们都必须是唯一的;这不可能是可选的。谢谢你的帮助,但我试过了,但仍然不起作用。我在上面添加了更多细节
var set : Int
var setWeight : Int
var setReps : Int
var set : Int16
var setWeight : Int16
var setReps : Int16