Sözleşme Olarak Protokoller
Türlerden bağımsız davranış sözleşmeleri tanımlayın.
Sözleşme Olarak Protokoller, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Protokol Nedir?
Protokol, uyumlu bir türün uygulaması gereken yöntemlerin, özelliklerin ve diğer gereksinimlerin taslağını tanımlar. Bu bir sözleşmedir: protokolü benimseyen her tür, protokolün bildirdiği her şeyi sağlamayı taahhüt eder.
protocol Greetable {
var name: String { get }
func greet() -> String
}Bir Protokole Uyum Sağlama
Bir tür, protokolü benimseyip tüm gereksinimleri sağlayarak uyum sağlar. Burada bir yapı hem name özelliğini hem de greet() yöntemini yerine getirir.
protocol Greetable {
var name: String { get }
func greet() -> String
}
struct Person: Greetable {
let name: String
func greet() -> String { "Hello, I am " + name }
}
let p = Person(name: "Ada")
print(p.greet())Özellik Gereksinimleri
Protokoller, bir özelliğin yalnızca okunabilir ({ get }) mi, yoksa hem okunabilir hem yazılabilir ({ get set }) mi olması gerektiğini belirtir. Saklanan veya hesaplanan bir özellik, yalnızca okunabilir gereksinimi karşılayabilir.
protocol Identifiable {
var id: String { get }
}
struct User: Identifiable {
let id: String
}
print(User(id: "u-1").id)Yöntem Gereksinimleri
Yöntem gereksinimleri adı, parametreleri ve dönüş türünü listeler ancak gövde içermez. Uyumlu türler uygulamayı sağlar.
protocol Shape {
func area() -> Double
}
struct Square: Shape {
let side: Double
func area() -> Double { side * side }
}
print(Square(side: 3).area())mutating Gereksinimleri
Değer türlerinde self'i değiştiren yöntemler mutating olarak işaretlenmelidir. Gereksinimi mutating ile bildirin; böylece yapılar bu gereksinimi karşılayabilir.
protocol Toggleable {
mutating func toggle()
}
struct Switch: Toggleable {
var isOn = false
mutating func toggle() { isOn.toggle() }
}
var s = Switch()
s.toggle()
print(s.isOn)Protokolleri Tür Olarak Kullanma
Bir protokol, birinci sınıf bir türdür. Bunu değişkenler, parametreler ve dönüş değerleri için kullanarak uyumlu herhangi bir değeri kabul edebilirsiniz.
protocol Animal { func sound() -> String }
struct Dog: Animal { func sound() -> String { "Woof" } }
struct Cat: Animal { func sound() -> String { "Meow" } }
let animals: [Animal] = [Dog(), Cat()]
for a in animals { print(a.sound()) }Protokollerle Çok Biçimlilik
Bir protokol yöntemini çağırmak, değerin arkasındaki somut türe yönlendirilir. Bu, tek bir sözleşme aracılığıyla birçok türle çalışan kod yazmanızı sağlar.
protocol Describable { func describe() -> String }
struct Book: Describable { let t: String; func describe() -> String { "Book: " + t } }
struct Film: Describable { let t: String; func describe() -> String { "Film: " + t } }
func show(_ d: Describable) { print(d.describe()) }
show(Book(t: "Swift"))
show(Film(t: "Inception"))Başlatıcı Gereksinimleri
Protokoller başlatıcılar gerektirebilir. Sınıflar, alt sınıfların da bunu sağlaması için uygulamayı required olarak işaretlemelidir.
protocol FromInt {
init(value: Int)
}
struct Wrapper: FromInt {
let value: Int
init(value: Int) { self.value = value }
}
print(Wrapper(value: 42).value)Protokol Kalıtımı
Bir protokol, bir veya daha fazla başka protokolden kalıtım alarak devralınan gereksinimlere ek gereksinimler getirebilir.
protocol Named { var name: String { get } }
protocol Aged: Named { var age: Int { get } }
struct Member: Aged {
let name: String
let age: Int
}
let m = Member(name: "Lin", age: 30)
print(m.name, m.age)Yalnızca Sınıflara Özel Protokoller
Uyumluluğu sınıflarla sınırlamak için bir protokolü AnyObject ile işaretleyin; bu, temsilcilik gibi başvuru semantiği gerektiren durumlarda kullanışlıdır.
protocol Counter: AnyObject {
var count: Int { get set }
}
class Box: Counter {
var count = 0
}
let b = Box()
b.count = 5
print(b.count)Uyumluluğu Denetleme
Bir değerin çalışma zamanında bir protokole uyup uymadığını sınamak için is ve as? kullanın.
protocol Flyer { func fly() }
struct Bird: Flyer { func fly() { print("flap") } }
struct Rock {}
let things: [Any] = [Bird(), Rock()]
for t in things {
if let f = t as? Flyer { f.fly() } else { print("grounded") }
}Hızlı Kontrol
Protokol gereksinimlerini anlayışınızı sınayın.
Özet
Bir protokolün bir sözleşme olduğunu öğrendiniz: uygulama sağlamadan özellik, yöntem, mutating ve başlatıcı gereksinimlerini bildirir. Türler her gereksinimi karşılayarak uyum sağlar; protokoller çok biçimlilik için tür olarak kullanılabilir, başka protokollerden kalıtım alabilir ve AnyObject ile sınıflarla sınırlandırılabilir.
Sıkça Sorulan Sorular
“Sözleşme Olarak Protokoller” dersi ücretsiz mi?
Evet — “Sözleşme Olarak Protokoller” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Sözleşme Olarak Protokoller” dersinde ne öğreneceğim?
Türlerden bağımsız davranış sözleşmeleri tanımlayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Sözleşme Olarak Protokoller” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sözleşme Olarak Protokoller
- Uzantılarda Varsayılan Gerçekleştirimler
- Protokol Birleştirme
- Koşullu Uyum