Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

collect adlı bir fonksiyon tanımlayın; bu fonksiyon:

  • Bir n tamsayısı ve bir builder: (Int) -> String closure'ı alır
  • builder'den i'e kadar (n dahil) her 1 için n'ı ç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
quiz iconKendini test et

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

Kendi başına pratik yap: Swift playground