Thomas Schar'ın cevabını tamamlıyor. Swift protokol sihri uzantıdan geliyor.
- Swift protokolleri, uzantı aracılığıyla uygulamalar alabilir (Swift
2). Java 8 arabiriminin varsayılan uygulamaları olabilir, ancak "geriye dönük olarak" yapılamaz.
- Swift'te,
herhangi bir sınıfa veya yapıya protokol gereksinimlerini (ve gerekirse uygulamalarını) "geriye dönük olarak" ekleyebilirsiniz .
- Swift protokolleri genel (yani <..>) özelleştirme desenini değil, bir typealias şemasını (yani İlişkili Türler) izler. Başlangıçta kafa karıştırıcı olabilir, ancak
bazı durumlarda "açılı ayraç körlüğü" nü önleyebilir .
- Swift, protokol gereksinimlerinin ve uzantılarının nereye ve nasıl uygulandığı konusunda çok spesifik olmasına izin veren gelişmiş bir tür desen eşleşmesine sahiptir. Java'dan geldiğinde kafa karıştırıcı olabilir, ancak çok fazla gücü vardır.
- Bir özellik / param için hızlı bir protokol oluşturulabilir (örn. Kutlama: protokol)
Beni birkaç saat başıma kaşıran şeylerden biri, tüm protokollerin özellik türü olarak kullanılamaması. Örneğin, typealias içeren bir protokolünüz varsa, bunu doğrudan bir özellik türü olarak kullanamazsınız (bunu düşündüğünüzde mantıklıdır, ancak Java'dan gelmek gerçekten userdao: IDao gibi bir özelliğe sahip olmak isteriz).