Swift 类型为“”的值无法转换为指定的类型集<&燃气轮机;敏捷的

Swift 类型为“”的值无法转换为指定的类型集<&燃气轮机;敏捷的,swift,swift4,Swift,Swift4,我正在尝试创建一组随机练习。在这里,我已经根据教程使我的结构可散列和可均衡,这很好,因此可以将其放入一个集合中 当我使用数组收集锻炼练习时,如下图所示,效果很好。但是当我切换到一个集合时,我得到了一个错误“无法将[u]类型的值转换为指定的“Set”类型。“Set”的什么意思是不能以与数组相同的方式进行映射 func generateWorkout() { let allPossibleExercises = masterExerciseArray let numberOfExer

我正在尝试创建一组随机练习。在这里,我已经根据教程使我的结构可散列和可均衡,这很好,因此可以将其放入一个集合中

当我使用数组收集锻炼练习时,如下图所示,效果很好。但是当我切换到一个集合时,我得到了一个错误“无法将[u]类型的值转换为指定的“Set”类型。“Set”的什么意思是不能以与数组相同的方式进行映射

func generateWorkout() {
    let allPossibleExercises = masterExerciseArray
    let numberOfExercisesKey = Int(arc4random_uniform(4)+3)

//error triggers on the line below if I switch [WorkoutExercise]
//for Set<WorkoutExercise> (which conforms to Hashable/Equatable

let workoutSet : [WorkoutExercise] = (1...numberOfExercisesKey).map { _ in
        let randomKey = Int(arc4random_uniform(UInt32(allPossibleExercises.count)))

return WorkoutExerciseGenerator( name: allPossibleExercises[randomKey].name,
 maxReps: allPossibleExercises[randomKey].maxReps).generate()
    }
    print (workoutSet)
}
func generateWorkout(){
设allPossibleExercises=masterExerciseArray
设numberOfExercisesKey=Int(arc4random_均匀(4)+3)
//如果我切换[WorkoutExercise],则会在下一行触发错误
//对于Set(符合Hashable/Equatable
让workoutSet:[WorkoutExercise]=(1…numberOfExercisesKey).map{uu}in
设randomKey=Int(arc4random_统一(UInt32(allPossibleExercises.count)))
return WorkoutExerciseGenerator(名称:AllPossibleeExercises[randomKey]。名称,
maxReps:allPossibleExercises[randomKey].maxReps.generate()
}
打印(作业集)
}
这里有一个带有类似错误消息的答案,但我的数组不会像本例中那样为空,所以我认为这不是同一个根本原因


更新:对于存在相同问题的任何人,您都可以使用数组,但如果正确的元素是可散列/可均衡的,则只需随后将数组转换为集合即可。如果创建数组有效,则创建数组,然后从数组中创建
集合。
如果所有涉及的对象都符合
可散列
此i他应该会工作的

func generateWorkout() {
    let allPossibleExercises = masterExerciseArray
    let numberOfExercisesKey = Int(arc4random_uniform(4)+3)

    let workoutArray : [WorkoutExercise] = (1...numberOfExercisesKey).map { _ in
        let randomKey = Int(arc4random_uniform(UInt32(allPossibleExercises.count)))

        return WorkoutExerciseGenerator( name: allPossibleExercises[randomKey].name,
                                      maxReps: allPossibleExercises[randomKey].maxReps).generate()
    }
    let workoutSet = Set(workoutArray)
    print (workoutSet)
}

这两个元素都是可散列/相等的-我没有得到任何关于这一点的错误。错误行显示在m in映射下,如果这有帮助,则只有
WorkoutExercise
必须符合
Hashable