Özel Yüksek Seviyeli Fonksiyonlar
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 42 / 56.
Artık kendi yüksek mertebeli fonksiyonlarınızı yazabilirsiniz ve bunlar map ile filter'ın yanına tam olarak uyum sağlayacaktır. Kalıp her zaman aynıdır: bir closure parametresi alın, döngü içinde onu çağırın, sonucu döndürün.
extension Array {
func myMap<T>(_ transform: (Element) -> T) -> [T] {
var result: [T] = []
for item in self {
result.append(transform(item))
}
return result
}
}
[1, 2, 3].myMap { $0 * 10 } // [10, 20, 30]Uzantılar gözünde büyüyorsa bunun yerine serbest bir işlev yaz; fikir aynıdır:
func count<T>(_ items: [T], where predicate: (T) -> Bool) -> Int {
var n = 0
for item in items where predicate(item) {
n += 1
}
return n
}Closure'ları bir yerlere aktarabildiğinizde, standart kütüphane sihir gibi görünmeyi bırakır ve kendi başınıza yazabileceğiniz bir dizi desen gibi görünmeye başlar.
Görev
OrtaDiziyi bir kez dolaşan ve bir demet partition(_ items: [Int], by predicate: (Int) -> Bool) -> ([Int], [Int]) döndüren bir serbest fonksiyon (matched, rest) yazın: koşulu sağlayan öğeler ve geri kalanlar, her ikisi de özgün sıralarında.
İki satır okuyun: bir tamsayı min, ardından virgülle ayrılmış bir tamsayı listesi. partition koşulunu denetleyen bir yüklemle n > min işlevinizi kullanın. Şunları yazdırın:
matched: <...>rest: <...>
Her listeyi , ile birleştirin (yazdırılacak hiçbir şey yoksa boş bırakın).
5 / 2,7,3,8,5 girdisi için çıktı şöyledir:
matched: 7,8
rest: 2,3,5Kendin dene
let min = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// YAPILACAK: partition(_:by:) -> ([Int], [Int]); eşleşenleri ve geri kalanları yazdır
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