Trailing Closure'lar
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 39 / 56.
Bir closure, bir fonksiyonun son argümanı olduğunda onu parantezlerin dışında yazabilirsiniz. Bu, trailing-closure biçimidir ve Swift kodunun doğal okunmasını sağlar.
let nums = [1, 2, 3]
// Standart biçim
let a = nums.map({ $0 * 2 })
// Trailing-closure biçimi
let b = nums.map { $0 * 2 }Eğer closure tek argümansa, parantezler de kaybolur. Bu yüzden şimdiye kadar gördüğünüz her şey özel bir kontrol yapısı gibi okunur.
Aynı şekilde closure alan kendi fonksiyonlarınızı yazabilirsiniz:
func repeatN(_ n: Int, action: () -> Void) {
for _ in 0..<n {
action()
}
}
repeatN(3) {
print("hi")
}Sondaki closure biçimi, repeatN(3) { ... } ifadesinin yerleşik bir döngü gibi okunmasını sağlar. Amaç da budur: kendiniz oluşturduğunuz kontrol yapıları, standart kütüphanedekilerle tamamen aynı görünür.
Görev
Kolaycollect adlı bir fonksiyon tanımlayın; bu fonksiyon:
- Bir
ntamsayısı ve birbuilder: (Int) -> Stringclosure'ı alır builder'deni'e kadar (n dahil) her1içinn'ı çağırır ve elde edilen dizelerin dizisini döndürür
stdin'den bir tamsayı okuyun, bu tamsayıyla collect fonksiyonunu kullanarak her değer için "i=<i>" üreten sondaki bir closure ile çağırın ve birleştirilmiş sonucu , ile yazdırın.
Girdi 4 için çıktı i=1,i=2,i=3,i=4 olur.
Kendin dene
let n = Int(readLine()!)!
// YAPILACAK: func collect(_ n:Int, builder:(Int)->String) -> [String]
// sonra collect(n) { ... } çağırın ve "," ile birleştirilmiş şekilde yazdırın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri8Closure'lar
Closure TemelleriTrailing Closure'larDeğer YakalamaClosure DöndürmeÖzel Yüksek Seviyeli FonksiyonlarÖzet - Pipeline OluşturucuKendi başına pratik yap: Swift playground