Swift'te tuple'lar için desen eşleme, değerleri karşılaştırmayı ve ayıklamayı kolaylaştırır. Switch içerisinde, tuple'lar doğrudan desen içinde ayrıştırılabilir:
let point = (x: 0, y: 2) switch point { case (0, 0): print("Koordinat sisteminin başlangıcında") case (0, let y): print("x = 0, y = \(y)") case let (x, y) where x == y: print("x, y'ye eşit") default: print("Farklı bir nokta") }
İncelikler:
Switch-case içinde
(String, Int)türündeki bir tuple'ı farklı türlerden case deseniyle karşılaştırabilir miyiz, örneğincase (let a, let b):?
Çoğu kişi bunun mümkün olduğunu söylese de, önemli olan — desendeki değişkenlerin türlerinin, tuple'ın türüne kesin olarak uymasıdır.
let pair = ("abc", 5) switch pair { case (let text, let number): print("Metin: \(text), sayı: \(number)") // Tamam case (let x, let y) where x == y: print("Hata") // Hata: İkili işlemci '==' 'String' ve 'Int' türündeki operandlara uygulanamaz default: break }
Eğer türler birbirine uymazsa, derleyici derleme aşamasında hata verecektir.
Hikaye
Bir projede, sunucu yanıtını tuple olarak çözümlemek için switch-case kullanmaya çalıştılar, ancak olası nil değerlerini dikkate almadılar. Bu durum, hiçbir case'in uymadığı ve default'un tetiklendiği anlamına geliyordu, oysa farklı bir mantık öngörülmüştü.
Hikaye
Tür uyuşmazlığı: işlevde tuple (Int, String) alındı, ancak (String, Int) olarak ayıklamaya çalıştılar. Sonuç — derleme aşamasında hataya neden oldu ve nedenini bulmak için kaybedilen zaman.
Hikaye
Sonucun tuple'ını ayıklama işlemi için guard kullanıldı, ama negatif değerler durumu göz ardı edildi, oysa yalnızca pozitif sayılar için işleme tabi tutulması planlanmıştı. Sonuç olarak, bazı geçerli durumlar göz ardı edildi ve bu, iş mantığında sorun yarattı.