Как развернуть Optional, когда кортежи сопоставления с образцом в Swift?

В Свифте есть общееif let шаблон, используемый для развертывания опций:

if let value = optional {
    print("value is now unwrapped: \(value)")
}

В настоящее время я делаю такой тип сопоставления с образцом, но с кортежами в случае переключателя, где оба параметра являются необязательными:

//url is optional here
switch (year, url) {
    case (1990...2015, let unwrappedUrl):
        print("Current year is \(year), go to: \(unwrappedUrl)")
}       

Тем не менее, это печатает:

"Current year is 2000, go to Optional(www.google.com)"

Есть ли способ, с помощью которого я могу развернуть необязательное соответствие и шаблонное совпадение, только если оно не равно нулю? В настоящее время мой обходной путь заключается в следующем:

switch (year, url) {
    case (1990...2015, let unwrappedUrl) where unwrappedUrl != nil:
        print("Current year is \(year), go to: \(unwrappedUrl!)")
}       

Ответы на вопрос(3)

Вы можете сделать так:

switch(year, x) {
    case (1990...2015,.Some):
    print("Current year is \(year), go to: \(x!)")
}

и вы также можете сделать

 switch(year, x) {
    case (1990...2015, let .Some(unwrappedUrl)):
    print("Current year is \(year), go to: \(unwrappedUrl)")
}
 Sahil26 мая 2016 г., 08:10
тогда вы можете сделать как case (1990 ... 2015, let .Some (unwrappedUrl)): как это сделал @Martin R.
 Enrico Susatyo26 мая 2016 г., 07:26
В этом примере это работает, но я на самом деле не хотел использовать явный оператор развертывания, потому что я буду использовать эту переменную более одного раза. Есть ли способ просто развернуть его в другую переменную?
Решение Вопроса

Вы можете использоватьx? шаблон:

case (1990...2015, let unwrappedUrl?):
    print("Current year is \(year), go to: \(unwrappedUrl)")

x? это просто ярлык для.some(x)так что это эквивалентно

case (1990...2015, let .some(unwrappedUrl)):
    print("Current year is \(year), go to: \(unwrappedUrl)")

в случае переключателя вы можете развернуть (когда это необходимо), а также оценить развернутые значения (используя where) в том же случае.

Как это:

let a: Bool? = nil
let b: Bool? = true

switch (a, b) {
case let (unwrappedA?, unwrappedB?) where unwrappedA || unwrappedB:
  print ("A and B are not nil, either A or B is true")
case let (unwrappedA?, nil) where unwrappedA:
  print ("A is True, B is nil")
case let (nil, unwrappedB?) where unwrappedB:
  print ("A is nil, B is True")
default:
  print("default case")
}

Ваш ответ на вопрос