无法推断复杂的闭包返回类型;添加显式类型以消除Swift UI的歧义
当我在视图中保留foreach循环时,我得到一个错误,该错误表示视图“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”。当我将foreach循环移出视图时,它工作得很好。当我在一个对象上实现循环时,我刚开始出现这个错误,然后我循环直到某个数字将“伪字符串”传递到ExerciseTableRow视图中。我不知道该怎么解决这个问题。提前谢谢你无法推断复杂的闭包返回类型;添加显式类型以消除Swift UI的歧义,swift,swiftui,Swift,Swiftui,当我在视图中保留foreach循环时,我得到一个错误,该错误表示视图“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”。当我将foreach循环移出视图时,它工作得很好。当我在一个对象上实现循环时,我刚开始出现这个错误,然后我循环直到某个数字将“伪字符串”传递到ExerciseTableRow视图中。我不知道该怎么解决这个问题。提前谢谢你 struct PassedExerciseCard: View { var exercise : String var sets : [E
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循环时,它会抛出titleexerciseSetId
中所述的其他异常,这是可选的。可选的不是ID类型。如果你想迭代一个列表,你需要确保每个元素都有一个ID,并且它们都必须是唯一的;这不可能是可选的。谢谢你的帮助,但我试过了,但仍然不起作用。我在上面添加了更多细节
var set : Int
var setWeight : Int
var setReps : Int
var set : Int16
var setWeight : Int16
var setReps : Int16