Swift: переключение между двумя необязательными значениями - PullRequest
3 голосов
/ 01 мая 2020

Я пытаюсь реализовать переключение между двумя значениями параметров:

import UIKit

var numOne: Int?
var numTwo: Int?

func doSomething() {
    switch (numOne, numTwo) {
    case (!nil, nil):
        print("something")
    case (_ == _):
        print("equal")
    default:
        break
    }
}

doSomething()

Но я получаю следующие ошибки:

В первом случае я получаю эту ошибку:

'nil' is not compatible with expected argument type 'Bool'

во втором случае я получаю эту другую ошибку:

Expression pattern of type 'Bool' cannot match values of type '(Int?, Int?)'

Мой вопрос к вам, ребята, как можно Мне удается сгенерировать случаи между этими дополнительными значениями?

Буду очень признателен за вашу помощь

1 Ответ

7 голосов
/ 01 мая 2020

Здесь нет ничего плохого; синтаксис просто неверный.

Для первого случая вы имеете в виду:

case (.some, .none):

Нет таких вещей, как !nil. Необязательные не булевы. Вы также можете написать (.some, nil), так как nil является псевдонимом для .none, но это сбивает с толку.

Для второго случая вы имеете в виду:

case _ where numOne == numTwo:

Дело здесь Вы имеете в виду все случаи (_), где условие истинно (where ...).


func doSomething() {
    switch (numOne, numTwo) {
    case (.some, .none):
        print("something")
    case _ where numOne == numTwo:
        print("equal")
    default:
        break
    }
}
...