Operator overloading — kullanıcı türleri için standart (ve kendi) operatörlerin davranışını tanımlama veya yeniden tanıma yeteneğidir. Bu, yapılarınıza ve sınıflarınıza işlemleri daha ifade edici bir şekilde yazmanıza olanak tanır.
Özellikler:
operator modifikasyonu ile static func anahtar kelimesiyle tanımlanır.Equatable, Comparable vb.) uymak gereklidir.infix, prefix, postfix gibi kendi operatörlerinizi oluşturabilirsiniz; bunları ilgili anahtar kelimeleri kullanarak belirtebilirsiniz.Örnek:
struct Vector2D { var x: Double var y: Double static func +(lhs: Vector2D, rhs: Vector2D) -> Vector2D { return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y) } } let a = Vector2D(x: 1, y: 2) let b = Vector2D(x: 3, y: 4) let sum = a + b // Vector2D(x: 4, y: 6)
Nuanuslar:
ExpressibleByBooleanLiteral, BooleanType) uyulmasını gerektirir.precedence group alanını belirtmek gerekir.Standart operatörleri, örneğin +, sınıf nesneleri ile çalışacak şekilde aşırı yükleyebilir miyiz? Ve kendi yapılarınızı == ile karşılaştırmak için ne gereklidir?
Cevap: Evet, standart operatörler (örneğin, +, ==, <) kullanıcı yapı ve sınıfları için aşırı yüklenebilir. Yapıların/sınıfların == ile karşılaştırılabilmesi için türün Equatable protokolüne uyması ve eşitlik için statik bir işlev gerçekleştirmesi gerekir:
Örnek:
struct Point: Equatable { let x: Int let y: Int static func ==(lhs: Point, rhs: Point) -> Bool { return lhs.x == rhs.x && lhs.y == rhs.y } }
Hikaye
Set veya sözlükte anahtar olarak bu türü kullanırken hash(into:) işlevini uygulamadan yapılmış == operatörünü yeniden tanımlamak. Sonuç olarak, aynı öğeler iki kez kümeye düşmeli ya da bulunmamalıdır; zira standart Hashable mekanizması ihlal edilmiştir.
Hikaye
precedence group belirtilmeden kendi infix operatörü oluşturmak. Operatör, karmaşık ifadelerde hatalara neden olan mantıksız bağlam kurallarına göre beklenmedik bir şekilde çalıştı.
Hikaye
Projede modellerin birleştirilmesi için | operatörü tanıtıldı, ancak yeni başlayanlar bunu bit düzeyindeki OR işlemi ile sıkça karıştırdılar; bu da veri yönetiminde kafa karışıklığına ve yanlış işlenmelere neden oldu.