Значение типа _ не может быть преобразовано в указанный тип. Set <> Swift - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать набор случайных упражнений.Я сделал свою структуру Hashable и Equatable, следуя инструкции, приведенной здесь https://medium.com/@JoyceMatos/hashable-protocols-in-swift-baf0cabeaebd, и она работает отлично, поэтому она готова быть помещенной в набор <>.

Когда я использую массив для сбора тренировкиупражнения, как показано ниже, работает нормально.Но когда я переключаюсь на Set <>, я получаю сообщение об ошибке "не могу преобразовать значение типа [_] в указанный тип" Set ". Что такое" Sets ", что означает, что вы не можете отобразить так же, как Array"?

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)
}

Здесь есть ответ с похожим сообщением об ошибке Невозможно преобразовать значение типа '[_]' в указанный тип 'Array' , но мой массив не будет пустымкак в этом примере, поэтому я не думаю, что это одна и та же основная причина?

ОБНОВЛЕНИЕ: для тех, у кого возникла та же проблема, вы можете использовать массив, но потом просто преобразовать массив в набор, еслиправильные элементы: Hashable / Equatable

1 Ответ

0 голосов
/ 25 апреля 2018

Если создание массива работает, создайте массив, а затем сделайте Set из массива. Если все задействованные объекты соответствуют Hashable, это должно сработать.

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...