den folgenden Code Betrachten entsprechen:Kann ein Tupel von Subtypen nicht Muster
protocol P {}
struct A: P {}
func match(_ l: P, _ r: P) {
switch l {
case is A:
print("l is A")
default:
print("failed to match single value")
}
switch (l, r) {
case is (A, A):
print("(l, r) is (A, A)")
case (_, _) as (A, A):
print("(l, r) is (A, A)")
default:
print("failed to match tuple")
}
}
match(A(), A())
Ausführen dieses in Spielplatz erzeugt die folgende Ausgabe:
l is A
failed to match tuple
Offenbar Muster ein Tupel von Subtypen Anpassung funktioniert nicht. Ist das ein Fehler oder eine Funktion? Wenn es Letzteres ist, wäre es interessant zu wissen, warum.
Zugehörige: [Tuple "Upcasting" in Swift] (http://stackoverflow.com/questions/31270507/tuple-upcasting-in-swift) – Hamish