Trailing Closure
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 39 dari 56.
Jika closure menjadi argumen terakhir untuk sebuah fungsi, kamu dapat menulisnya di luar tanda kurung. Ini adalah bentuk trailing-closure, dan begitulah cara kode Swift terbaca secara alami.
let nums = [1, 2, 3]
// Bentuk standar
let a = nums.map({ $0 * 2 })
// Bentuk trailing closure
let b = nums.map { $0 * 2 }Jika closure adalah satu-satunya argumen, tanda kurung juga dihilangkan. Itulah sebabnya semua yang kamu lihat sejauh ini tampak seperti struktur kontrol khusus.
Kamu bisa menulis fungsi sendiri yang menerima closure dengan cara yang sama:
func repeatN(_ n: Int, action: () -> Void) {
for _ in 0..<n {
action()
}
}
repeatN(3) {
print("hi")
}Bentuk trailing closure membuat repeatN(3) { ... } terlihat seperti perulangan bawaan. Itulah tujuannya: struktur kontrol yang kamu buat sendiri terlihat sama seperti struktur kontrol dari library standar.
Tantangan
MudahDefinisikan fungsi collect yang:
- Menerima bilangan bulat
ndan closurebuilder: (Int) -> String - Memanggil
builderuntuk setiapidari1sampain(inklusif) dan mengembalikan array dari string yang dihasilkan
Baca bilangan bulat dari stdin, panggil collect dengan bilangan bulat tersebut menggunakan trailing closure yang menghasilkan "i=<i>" untuk setiap nilai, lalu cetak hasil yang digabungkan dengan ,.
Untuk input 4, output-nya adalah i=1,i=2,i=3,i=4.
Coba sendiri
let n = Int(readLine()!)!
// TODO: buat fungsi collect(_ n:Int, builder:(Int)->String) -> [String]
// lalu panggil collect(n) { ... } dan cetak hasil yang digabung dengan ","
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