#swift
#swift
Вопрос:
Это искусственная проблема, потому что я хочу узнать о swift более подробно. Компилятор swift жалуется на то, что следующее не является исчерпывающим. Конечно, в общем случае он не может определить, являются ли операторы case исчерпывающими. Как лучше всего сообщить компилятору, что мой список является исчерпывающим, например, в следующем случае?
let point = (2, 2)
switch point {
case let (x, y) where x == y:
println("on the x=y line")
case let (x, y) where x != y:
println("somewhere else off x=y line")
}
Это единственный вариант добавить пустые значения по умолчанию: cases?
Ответ №1:
Это единственный вариант добавить пустые значения по умолчанию: cases?
На данный момент, да. Это ошибка компилятора, которую мы, на данный момент, должны обойти. На вашем месте я бы, конечно, отправил радар с подробным описанием ваших находок.
Комментарии:
1. Возможно, в конечном итоге это не будет «ошибкой компилятора», которая когда-либо будет исправлена. При перегрузке оператора возможно создавать типы, в которых ни
==
ни!=
не будут возвращатьtrue
для одних и тех же двух операндов.2. Я зарегистрировал радар, как было предложено; см. 17568787.
3. Apple сообщила об ошибке 17568787. Он закрыт, потому что для его разрешения потребовался бы решатель ограничений, но это отрицательно повлияло бы на время компиляции.
Ответ №2:
Я изучаю Swift и нашел следующее решение для вашего краткого фрагмента:
let point = (2, 2)
switch point {
case let (x, y) where x == y:
print("on the x=y line")
case let (x, y): // Otherwise where x != y:
print("somewhere else off x=y line")
}
Я знаю, это не решение для проверки исчерпываемости, выполняемой компилятором, но это способ избежать бесполезного default
предложения.