Быстрая ошибка: EnumName имеет необработанный тип, который зависит от самого себя - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю над старой базой кода приложения Swift iOS (созданной другим разработчиком). На прошлой неделе проблем не было, но похоже, что после последнего обновления XCode (11.4 (11E146)) я не могу построить проект из-за ошибки (пример приведен ниже):

'CarBrand' has a raw type that depends on itself

Везде на протяжении всего проект библиотеки EnumList используется ... кажется, что это вызывает проблему. (https://github.com/polac24/EnumList)

Вот пример того, как выглядит код:

import Foundation
import EnumList

enum CarBrand: EnumListStringRaw<CarBrand.Values>, RawRepresentable {
    struct Values: StringEnumValues {
        typealias Element = CarBrand
        static var allRaws:Set<String> = []
    }

    case AUD = "Audi AG"
    case BMW = "Bayerische Motoren Werke AG"
    case MERC = "Mercedes-Benz"
}

Это перечисление затем используется в ряде мест (например, в табличном представлении) примерно так:

let brandsList = Array(CarBrand.Values.all)
cell.textLabel?.text = brandsList[indexPath.row].rawValue.value

Поскольку существует много этих ошибок и некоторые перечисления относительно велики, мне было интересно, есть ли быстрое исправление или Обойти это? Или мне придется перекодировать все перечисления и все файлы, которые их реализуют?

Любая помощь будет принята с благодарностью! Спасибо!

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вам не нужна сторонняя библиотека для итераций по перечислениям (похоже, излишнее).

Просто используйте перечисление CarBrand, используя протокол CaseIterable, например:

enum CarBrand: String, RawRepresentable, CaseIterable {
    case AUD = "Audi AG"
    case BMW = "Bayerische Motoren Werke AG"
    case MERC = "Mercedes-Benz"
}

Теперь вы можете go просматривать все перечисления следующим образом:

let allCarBrands = CarBrand.allCases

0 голосов
/ 09 апреля 2020

Я получил это решение от создателя библиотеки EnumList на GitHub и подумал, что размещение его здесь может помочь кому-то еще на этом пути. Это решение очень быстрое, и не требует переписывания кода для перечислений или их реализаций.

import Foundation
import EnumList

extension CarBrand{}

enum CarBrand: EnumListStringRaw<CarBrand.Values>, RawRepresentable {
    struct Values: StringEnumValues {
        typealias Element = CarBrand
        static var allRaws:Set<String> = []
    }

    case AUD = "Audi AG"
    case BMW = "Bayerische Motoren Werke AG"
    case MERC = "Mercedes-Benz"
}

Простое добавление пустого "расширения CarBrand {}", похоже, исправляет компилятор Swift проблема!

Ссылка на исходный ответ, полученный на GitHub: https://github.com/polac24/EnumList/issues/5

Спасибо создателю библиотеки за поддержку!

...