Частично, почему вы видите эту ошибку, потому что компилятор не может проверить, что коммутатор является исчерпывающим без запуска кода. Выражение 0...65535
создает структуру ClosedInterval
, и когда оператор switch выполняется, он должен спросить эту структуру, если значение quantity
находится в интервале. Там есть место для изменения во время выполнения, поэтому компилятор не может проверить его во время компиляции. (См. Проблема с остановкой .)
В более общем плане компилятор не может обнаружить исчерпывающий переключатель для целых значений - даже если вы добавляете конкретные случаи для каждого целочисленного значения (case 0: ... case 1: ... ... case 65535:
), он не знает, что ваш коммутатор является исчерпывающим. (Теоретически это могло бы: рассмотрите подачу запроса функции об этом, если это то, что вы хотели бы видеть.)
Как бы то ни было, есть два сценария, в которых Swift может обнаружить полноту и позволить вам опустить предложение default
: перечисление и привязка значений в кортежах. @ Ответ NateCook охватывает перечисления - если вы включаете значение enum и имеете case
в своем switch
для каждого case
в перечислении, вам не нужно default
. Вы также не нуждаетесь в метке default
, если вы включаете кортеж и связываете все возможные комбинации значений, как показано в в книге Swift :
switch anotherPoint {
case (let x, 0):
println("on the x-axis with an x value of \(x)")
case (0, let y):
println("on the y-axis with a y value of \(y)")
case let (x, y):
println("somewhere else at (\(x), \(y))")
}
Вы может обобщить это правило как «если система типа знает о возможных значениях вашего типа, она может обнаружить switch
полноту», но тот факт, что существует уровень, на котором система типов не знает диапазон возможных (например, ) UInt32
значения являются своего рода расщепляющими волосками ...
Вы можете импортировать его так:
import {AppProvider, Page, Card, Button} from '@shopify/polaris';
import '@shopify/polaris/styles.css';
И использовать его вот так
<AppProvider>
<Page title="Example app">
<Card sectioned>
<Button onClick={() => alert('Button clicked!')}>Example button</Button>
</Card>
</Page>
</AppProvider>
Вот живой пример: https://stackblitz.com/ edit / response-eaexfs
Более подробная информация здесь: https://www.npmjs.com/package/@shopify/polaris