Когда вы используете несколько шаблонов в одном случае switch
, они должны связывать все одинаковые переменные.
Swift видит эту строку:
case (let c as C, 4), let nonNilSpecific as? String:
и думает, что выВы пытаетесь найти совпадение либо (let c as C, 4)
, либо let nonNilSpecific as? String
.Эти два варианта связывают разные переменные, поэтому в теле дела невозможно узнать, какие переменные были связаны.
Возможно, вы хотели что-то вроде этого:
switch (unknown, unknown.common) {
case (let a as A, 4):
break
case (let b as B, 4):
break
case (let c as C, 4) where c.specific != nil:
// force unwrap safe here, no closure needed
let nonNilSpecific = c.specific!
default: break
}
Используйте if
:
let tuple = (unknown, unknown.common)
if case (let a as A, 4) = tuple {
// use a
} else if case (let b as B, 4) = tuple {
// use b
} else if case (let c as C, 4) = tuple, let nonNilSpecific = c.specific {
// use c and nonNilSpecific
} else {
// default case
}