«Варианты перечисления Variadic не поддерживаются» ошибка swift 5 - PullRequest
1 голос
/ 31 мая 2019

Я получаю Variadic enum cases are not supported ошибку в следующем коде. Это компилировалось и работало нормально в Swift4, но приводило к ошибке времени компиляции в Swift5, Xcode 10.2

enum ModelRule {
        case required(keys: String...) // error: Variadic enum cases are not supported
        case nonEmptyString(keys: String...) // error: Variadic enum cases are not supported
        case emptyString(key: String)
}

хотя сообщение очень четкое, я хотел бы знать, почему они удаляют идеально работающую функцию? Или я что-то здесь упускаю?

Кроме того, есть ли лучшее решение для вышеуказанной ошибки, чем следующие? case required(keys: [String])

Ответы [ 2 ]

3 голосов
/ 31 мая 2019

Параметр Variadic раньше работал на swift 4, но не был намеренно.Просто используйте массивы

enum ModelRule {
    case required(keys: [String])
    case nonEmptyString(keys: [String])
    case emptyString(key: String)
}

См. Примечания к выпуску Swift

1 голос
/ 14 июня 2019

Расширение комментария:

У вас должны быть массивы в связанных значениях дел. Но для удобства создайте методы с переменными параметрами.

Пример:

enum ModelRule {
    case required(keys: [String])
    case nonEmptyString(keys: [String])
    case emptyString(key: String)

    init(required keys: String...) { // It could be static func, but init here works and looks better
        self = .required(keys: keys)
    }

    init(nonEmptyString keys: String...) {
        self = .nonEmptyString(keys: keys)
    }

    init(emptyString key: String) { // Added this just for my OCD, not actually required
        self = .emptyString(key: key)
    }
}

Использование:

let required = ModelRule(required: "a", "b", "c") // .required(keys: ["a", "b", "c"])
let nonEmpty = ModelRule(nonEmptyString: "d", "e", "f") // .nonEmptyString(keys: ["d", "e", "f"])
let empty = ModelRule(emptyString: "g") // .emptyString(key: "g")
...