Mengembalikan Closure
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 41 dari 56.
Kamu melihat makeCounter mengembalikan closure. Trik yang sama memungkinkanmu membuat perilaku yang dapat dikonfigurasi: gunakan parameter sekali, lalu dapatkan fungsi yang menggunakannya berkali-kali.
func multiplier(_ k: Int) -> (Int) -> Int {
return { n in n * k }
}
let triple = multiplier(3)
let tenfold = multiplier(10)
print(triple(4)) // 12
print(tenfold(4)) // 40Closure yang dikembalikan menangkap k, jadi setiap pemanggilan multiplier(...) menghasilkan closure baru dengan k-nya sendiri.
Pola ini adalah inti dari kode "strategi" di Swift: tulis fungsi yang menerima konfigurasi dan mengembalikan closure, lalu teruskan closure itu ke map, filter, sorted(by:), atau ke mana pun nilai berbentuk fungsi diperlukan.
Tantangan
SedangBuat dua factory closure:
greaterThan(_ k: Int) -> (Int) -> Bool: mengembalikan predikat yang bernilaitruesaat argumennya lebih besar darikscaleBy(_ k: Int) -> (Int) -> Int: mengembalikan fungsi yang mengalikan argumennya dengank
Baca tiga baris:
- Sebuah bilangan bulat
threshold - Sebuah bilangan bulat
scale - List bilangan bulat yang dipisahkan koma, yaitu
nums
Cetak tiga baris:
- Bilangan yang lebih besar dari threshold, filter dengan closure dari
greaterThan, lalu gabungkan dengan, - Bilangan yang sama, setelah diskalakan dengan map menggunakan
scaleBy, lalu gabungkan dengan, - Jumlah bilangan yang lolos
Untuk input 5 / 3 / 2,7,3,8,9, output-nya adalah:
7,8,9
21,24,27
3Coba sendiri
let threshold = Int(readLine()!)!
let scale = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: greaterThan, scaleBy; filter lalu map; cetak hasil yang digabungkan dan jumlahnya
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Jumlah dan indeksHuruf besar, huruf kecil, dan hapus spasiMencari dalam stringMemisahkan dan menggabungkanMengganti substringUlasan: Memeriksa nama pengguna4set
Membuat setGabungan dan IrisanSelisih dan Selisih SimetrisHimpunan Bagian dan Himpunan SupersetRingkasan: Filter Tag7Proyek: Pelacak Kebiasaan
Gambaran Umum ProyekTandai Selesai2Rentang dan Langkah
Rentang Tertutup vs Setengah TerbukaLangkahMetode RentangRentang dalam SwitchRangkuman: Kisi Kalender8Closure
Dasar ClosureTrailing ClosureMenangkap NilaiMengembalikan ClosureHigher-Order KustomRangkuman, Pembuat PipelineLatihan sendiri: Playground Swift