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

阿宗扬基

当我将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)
    }
}

更新

我了解到我所犯的错误根本不是错误。实际的错误是编译器认为我没有ExerciseSet的属性,它是NSManagedObject。我更新了对象,使它有了一个主意,并更新了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 Workout {

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

    @NSManaged public var date: String?
    @NSManaged public var muscle: String?
    @NSManaged public var workoutId: UUID?
    @NSManaged public var exercise: NSSet?
    
    public var wrappedDate: String{
        date ?? "Unknown Date"
    }
    
    public var wrappedMuscle: String {
        muscle ?? "Unknown Muscle"
    }
    
    public var exerciseArray: [Exercise] {
        let set = exercise as? Set<Exercise> ?? []
        
        return set.sorted{
            $0.wrappedName < $1.wrappedName
        }
     }

}

// MARK: Generated accessors for exercise
extension Workout {

    @objc(addExerciseObject:)
    @NSManaged public func addToExercise(_ value: Exercise)

    @objc(removeExerciseObject:)
    @NSManaged public func removeFromExercise(_ value: Exercise)

    @objc(addExercise:)
    @NSManaged public func addToExercise(_ values: NSSet)

    @objc(removeExercise:)
    @NSManaged public func removeFromExercise(_ values: NSSet)

}

在调用PassedExerciseCard的视图中(引发错误的位置),我将WorkoutEntity上的属性:“ exerciseArray”传递到我在foreach循环中使用的sets属性中。我相信这是发生错误的地方

练习表行:

struct ExerciseTableRow: View {
    @State public var weight : String = "0"
    @State public var reps : String = "0"
    var set : Int
    var readOnly : Bool
    var setWeight : Int
    var setReps : Int
    var body: some View {
        
        HStack{
            Text(String(set))
                .padding(.trailing, 40)
                .padding(.leading, 10)
            if readOnly == false{
                Group{
                    TextField("0", text: $weight)
                    TextField("0", text: $reps)
                }.textFieldStyle(RoundedBorderTextFieldStyle())
                    .frame(width: 50)
                    .multilineTextAlignment(.center)
                    .keyboardType(.numberPad)
                    .padding(.horizontal, 30)
            }
            else{
                Group{
                    Text(String(setWeight))
                    Text(String(setReps))
                }
                .frame(width: 50)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color.black, lineWidth: 1)
                    )
                    .padding(.bottom, 5)
                    .padding(.horizontal, 30)
            }
            
        }
        
        
    }
}
pawello2222

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

无法推断复杂的闭包返回类型;在处理简单布尔状态时添加显式类型以消除歧义

来自分类Dev

无法推断复杂的闭包返回类型swiftUI

来自分类Dev

无法使用if let语句推断复杂的闭包返回类型

来自分类Dev

Swift:无法使用NSFetchedResultsController推断复杂的闭包类型

来自分类Dev

高阶类型与高阶类型的歧义消除

来自分类Dev

高阶类型与高阶类型的歧义消除

来自分类Dev

Java var和推断类型的歧义

来自分类Dev

Ocaml 通过与值的接近程度来消除推断类型的歧义?

来自分类Dev

Haskell中类型的歧义

来自分类Dev

尾随返回类型中的类型 ID 歧义

来自分类Dev

scala 类型类隐式歧义

来自分类Dev

消除sizeof的歧义

来自分类Dev

消除sizeof的歧义

来自分类Dev

Xtext消除歧义

来自分类Dev

了解Haskell类型歧义的情况

来自分类Dev

了解Haskell类型歧义的情况

来自分类Dev

含歧义类型的parsec错误

来自分类Dev

Java 中的类型转换歧义

来自分类Dev

将内联显式类型注释添加到具有返回值但在Swift中没有输入参数的闭包中?

来自分类Dev

localtime()返回歧义

来自分类Dev

返回值的歧义

来自分类Dev

消除歧义:Angular,Bootstrap(css和js),angular.bootstrap,UI Bootstrap以及我应该了解的有关Angular和Bootstrap的其他信息

来自分类Dev

Soap UI无法识别复杂类型

来自分类Dev

如何消除重载函数的歧义

来自分类Dev

省略wbsearchentities的歧义消除结果

来自分类Dev

依赖名称的模板消除歧义

来自分类Dev

依赖名称的模板消除歧义

Related 相关文章

热门标签

归档