Por que não consigo usar uma constante de tupla como caso em uma instrução switch
Decidi brincar com as declarações e as tuplas do Swift. Parece um dos recursos mais interessantes do idioma.
Decidi jogar com tuplas mês / dia / ano. Para minha surpresa, não posso usar um valor constante de tupla como caso em uma instrução switch. Aqui está um exemplo (pode ser colado em um Playground e executado)
import UIKit
typealias mdyTuple = (month: Int, day: Int, year: Int)
let joesBirthday: mdyTuple = (month: 6, day: 7, year: 1978)
let someday: mdyTuple = (6, 7, 1978)
switch someday
{
//---------
//The line "case joesBirthday" won't compile.
//case joesBirthday:
// println("Joe was born on this day"
//---------
case (joesBirthday.month, joesBirthday.day, joesBirthday.year):
println("Joe was born on this day")
case (joesBirthday.month, joesBirthday.day, let year):
println("Joe is \(year-joesBirthday.year) today")
default:
println("Some other day")
}
O código comentado,case joesBirthday:
, não será compilado (no Xcode 6.3, se isso for importante). O caso abaixo (onde listo todos os elementos da tupla joesBirthday separadamente), que é mais difícil de digitar e mais difícil de ler, funciona)
Meu Playground travou o Xcode ao digitá-lo e travou novamente tentando reiniciar o Xcode, por isso estou tendo problemas para relatar o código de erro.
Ok, finalmente consegui que o Xcode parasse de travar (após 4 falhas seguidas. Yayyy!) O erro é "Operador binário~=
não pode ser aplicado a dois operandos mdyTuple ".
Por que está tentando usar o~=
operando? As tuplas não são equivalentes?
Existe algumlimpar \ limpo sintaxe alternativa que me permite usar uma tupla constante no caso de uma instrução switch?