Dalam artikel ini, anda akan belajar menggunakan pernyataan penjaga untuk mengawal aliran pelaksanaan program anda.
Swift If Statement menerangkan bagaimana anda dapat melakukan tindakan berdasarkan keadaan tertentu (nilai boolean). Dalam artikel ini, kami akan meneroka faedah pernyataan penjaga jika pernyataan untuk mengawal aliran program dan menulis kod yang lebih mudah dan bersih.
Penyataan Swift Guard
Penggunaan utama pernyataan penjaga adalah untuk memindahkan kawalan program dari ruang lingkup pada syarat-syarat tertentu. Pernyataan ini serupa dengan pernyataan if yang melaksanakan pernyataan berdasarkan keadaan tertentu (nilai boolean) tetapi tidak seperti jika, pernyataan penjaga hanya berjalan apabila syarat tertentu tidak dipenuhi.
Lebih-lebih lagi, pernyataan di dalam penjaga mesti keluar dari ruang lingkup. Oleh itu, kita perlu kenyataan kawalan program pengguna return
, break
, continue
atau throw
pada akhir kenyataan pengawal.
Sintaks Pernyataan Penjaga
penjaga ekspresi lain (// pernyataan // mesti mengandungi pernyataan kawalan: kembali, putus, teruskan atau lempar.)
- Di sini, ungkapan adalah ungkapan boolean (mengembalikan sama ada
true
ataufalse
). - Sekiranya ungkapan dinilai
false
, pernyataan di dalam blok kodguard
akan dijalankan. - Sekiranya ungkapan dinilai
true
, pernyataan di dalam blok kodguard
dilewatkan dari pelaksanaan.
Bagaimana pernyataan penjaga berfungsi?
Nota: akhir kenyataan pengawal mesti mengandungi suatu pernyataan kawalan return
, break
, continue
atau throw
.
Contoh 1: Bagaimana pernyataan penjaga berfungsi?
Pernyataan penjaga yang sah adalah seperti di bawah:
guard true else ( print("Condition not met") ) print("Condition met")
Semasa anda menjalankan program, outputnya adalah:
Syarat dipenuhi
Dalam program di atas, penjaga mengandungi nilai boolean true (syarat dipenuhi). Oleh kerana, pernyataan penjaga hanya dijalankan apabila keadaan tidak dipenuhi, pernyataan di dalam penjaga tidak dilaksanakan. Itulah sebabnya print("Condition met")
dijalankan dan output yang dikeluarkan Syarat di skrin.
Sekarang mari ubah keadaan menjadi salah seperti:
Contoh 2: pernyataan penjaga harus keluar dari ruang lingkup
guard false else ( print("Condition not met") ) print("Condition met")
Dalam program di atas, keadaan penjaga dinilai untuk false
. Jadi, penyataan print("Condition not met")
di dalam orang lain harus dilaksanakan. Tetapi anda akan mendapat ralat mengatakan bahawa badan 'penjaga' mungkin tidak jatuh, pertimbangkan untuk menggunakan 'kembali' atau 'baling' untuk keluar dari ruang lingkup.
Mesej ralat dalam cara perkataan mudah, anda perlu untuk memindahkan kawalan program dari kenyataan pengawal menggunakan return
, break
, continue
atau throw
kenyataan. Buat masa ini kami akan menggunakan return
. Dan kerana return
pernyataan hanya dapat digunakan di dalam fungsi, kita akan membungkus kod di atas dalam Swift Functions.
Contoh 3: pernyataan penjaga di dalam fungsi
Kita dapat menggunakan pernyataan penjaga di dalam fungsi di Swift sebagai:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Apabila anda menjalankan program di atas, outputnya adalah:
Keadaan tidak dipenuhi Hello selepas panggilan fungsi
Dalam program di atas, keadaan penjaga dinilai false
, oleh itu penyataan di dalam penjaga dilaksanakan. Pernyataan pertama print("Condition not met")
mengeluarkan Keadaan yang tidak dipenuhi di konsol.
Dan pernyataan itu return
menghentikan pelaksanaan fungsi dan pernyataan print("Hello, after function call")
setelah fungsi panggilan dijalankan yang mengeluarkan Hello selepas panggilan fungsi di konsol.
Contoh 4: Penjaga dengan pilihan
Kami telah melihat di Swift Optionals penggunaan if-let
untuk membuka pembuka pilihan. Walau bagaimanapun, kami juga dapat menggunakan pernyataan penjaga sebagai ganti if-let
untuk membongkar pilihan dengan satu kelebihan. Kelebihan utama membongkar pilihan dengan penjaga bukan if-let
ialah kita dapat meningkatkan ruang lingkup pemboleh ubah yang belum dibungkus.
Mari lihat ini dalam contoh di bawah:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Apabila anda menjalankan program di atas, outputnya adalah:
Nama adalah nihil. Tidak dapat memproses
Dalam program di atas, anda dapat melihat suhu nilai yang belum dibungkus digunakan di luar ruang lingkup yang ditentukan oleh pernyataan penjaga. Oleh kerana, nama ditakrifkan sebagai pilihan dan mengandungi nilai nihil, pernyataan penjaga gagal melepaskan nilai.
Oleh itu, pernyataan dalam penjaga lain melaksanakan yang mencetak Nama adalah nihil. Tidak dapat memproses output dan menghentikan fungsi dengan return
pernyataan. Kod setara dengan pernyataan penjaga di atas jika pernyataan if-else adalah:
func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase()
Makluman di atas dua penyataan itu sama ada berlaku dan melakukan pekerjaan yang sama. Tetapi menggunakan pernyataan if-let anda tidak boleh menggunakan nilai yang belum dibungkus di luar pernyataan if-let. Tetapi dengan pernyataan penjaga anda boleh menggunakan nilai yang belum dibuka melalui fungsi.
Contoh 5: Pelindung dengan pelbagai syarat
Pernyataan penjaga juga dapat merantai beberapa keadaan yang dipisahkan dengan koma (,) seperti:
func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Apabila anda menjalankan program di atas, outputnya adalah:
Nama adalah nihil atau tali kosong. Tidak dapat memproses
Dalam program di atas, pernyataan penjaga mengandungi dua keadaan yang dipisahkan dengan koma.
Syarat pertama let temp = name
membongkar pilihan yang kembali true
dalam kes kami dan keadaan kedua temp.count> 0
memeriksa jika rentetan yang belum dibungkus mempunyai lebih daripada 0 aksara yang dinilai false
dalam contoh kami.
Oleh itu, pernyataan di dalam pernyataan penjaga melaksanakan pernyataan print("Name is nil or an empty string. Cannot process")
yang mengeluarkan Nama adalah nihil atau tali kosong. Tidak dapat memproses di konsol dan menghentikan fungsi dengan return
pernyataan.