Это хорошее исправление, но я собираюсь пойти с ответом xxtesaxx, так как это проще.
от вопрос уже есть ответ здесь:
Как сравнить enum со связанными значениями, игнорируя его связанное значение в Swift? 4 ответаОшибка компилятора при сравнении значений типа enum с соответствующими значениями? 2 ответаязык: Swift2.3
Например, давайте я покажу вам различные виды перечислений
enum Normal {
case one
case two, three
}
enum NormalRaw: Int {
case one
case two, three
}
enum NormalArg {
case one(Int)
case two, three
}
Switch
может использоваться со всеми тремя перечислениями следующим образом:
var normal: Normal = .one
var normalRaw: NormalRaw = .one
var normalArg: NormalArg = .one(1)
switch normal {
case .one: print("1")
default: break
}
switch normalRaw {
case .one: print(normalRaw.rawValue)
default: break
}
switch normalArg {
case .one(let value): print(value)
default: break
}
В операторе if-else я могу сравнивать толькоNormal
а такжеNormalRaw
и сообщение об ошибке показывает дляNormalArg
поэтому я не могу запустить код
Бинарный оператор '==' нельзя применять к операндам типаNormalArg
а также_
Вот пример кода:
if normal == .two { // no issue
.. do something
}
if normalRaw == .two { // no issue
.. do something
}
if normalArg == .two { // error here (the above message)
.. do something
}
if normalArg == .one(_) { // error here (the above message)
.. do something
}
if normalArg == .three { // error here (the above message)
.. do something
}
Есть идеи? Я ничего не делаю с этим кодом, мне просто интересно, почему мы не можем сделать сравнение.