Swift'te == operatörü iki değerin eşitliğini kontrol etmek için kullanılır. Bu operatörü kullanıcı türleri ile kullanabilmek için, tür Equatable protokolüne uymalı ve statik == fonksiyonunu uygulamalıdır.
Uygulama simetrik ve geçişli olmalıdır. Örnek:
struct Person: Equatable { let name: String let age: Int static func ==(lhs: Person, rhs: Person) -> Bool { return lhs.name == rhs.name && lhs.age == rhs.age } }
Eğer türünüz == operatörünü gerçekleştirmiyorsanız, iki örneği karşılaştırma girişimi derleme hatasına neden olacaktır.
Soru: Eğer bir yapı veya sınıf Equatable protokolünü miras alıyorsa, neden bazen == operatörünü açıkça uygulamak gerekmiyor?
Cevap: Tüm özellikleri Equatable olan yapılar için, Swift otomatik olarak == operatörünün uygulamasını sentezler. Ancak türde Equatable olmayan özellikler varsa veya tür bir sınıf ise ve özel miras alıyorsa, sentez gerçekleştirilemez ve operatörün manuel uygulanması gerekir.
struct Point: Equatable { var x: Int var y: Int // == uygulaması gerekli değil, otomatik olarak sentezleniyor }
Hikaye
Bir projede, geliştirici
Equatable'a uyan bir yapıyaUIImagetüründe bir özellik ekledi. Derleme hatası ortaya çıktı çünküUIImageEquatable'ı gerçekleştirmiyor, dolayısıyla yapı için otomatik olarak==sentezlenemedi. Çözüm - yalnızca mantık açısından dikkate alınması gereken özelliklerle==operatörünü manuel olarak uygulamak.
Hikaye
Yapıya yeni bir özellik eklendikten sonra kullanıcı tanımlı
==operatöründe karşılaştırmasının eklenmeyi unuttu. Bu, koleksiyonlarla çalışırken hatalı mantığa ve kullanıcı filtresinde hatalara yol açtı.
Hikaye
Bir projede
Equatableuygulanmayan özel bir sınıf yazıldı, ancak onu bir Set içinde kullanmaya çalıştılar. Bu, Set'in öğelerin benzersiz olmasını gerektirmesi (ve dolayısıylaEquatableolmasını) nedeniyle runtime hatasına yol açtı.