Menangkap Nilai
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 40 dari 56.
Closure mengingat variabel yang berada dalam cakupan saat dibuat. Isi closure dapat membaca dan bahkan mengubahnya nanti, bahkan setelah fungsi yang melingkupinya selesai. Ini disebut capturing.
func makeCounter() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let next = makeCounter()
print(next()) // 1
print(next()) // 2
print(next()) // 3Setiap pemanggilan makeCounter memberimu count baru, jadi dua penghitung tidak pernah berbagi state:
let a = makeCounter()
let b = makeCounter()
print(a()) // 1
print(b()) // 1
print(a()) // 2Penangkapan membuat closure lebih kuat daripada fungsi biasa: closure membawa state bersamanya. Kamu akan melihat trik yang sama di JavaScript, Python, dan banyak bahasa lainnya.
Tantangan
SedangBuat pabrik penghitung sederhana.
Definisikan fungsi makeCounter(start: Int, step: Int) yang mengembalikan closure bertipe () -> Int. Setiap kali closure dipanggil, closure mengembalikan nilai berikutnya: pemanggilan pertama mengembalikan start, pemanggilan berikutnya mengembalikan start + step, pemanggilan selanjutnya mengembalikan start + 2*step, dan seterusnya.
Baca tiga bilangan bulat dari input: start, step, dan n. Buat penghitung dengan start dan step, lalu panggil penghitung itu n kali dan cetak setiap hasil pada barisnya sendiri.
Untuk input 5 / 3 / 4, outputnya adalah:
5
8
11
14Coba sendiri
let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!
// TODO: buat fungsi makeCounter(start:step:) -> () -> Int yang menyimpan nilai yang terus berubah
// lalu panggil fungsi itu sebanyak n kali dan cetak setiap hasilnya
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 KalenderLatihan sendiri: Playground Swift