Opsional adalah set atau not-set (bukan nil atau nil) ... meninggalkan kita dengan keputusan penting. "Bagaimana kita harus menulis kode kita sehingga dapat bekerja dengan benar untuk 2 negara bagian?". Cara kita membuka bungkus opsional adalah yang memutuskannya untuk kita.
Ada beberapa pendekatan yang dapat Anda gunakan untuk melawan not-set opsional.
- Jatuh!
- Bawalah nilainya menjadi sesuatu - jika tidak ditetapkan.
- Gagal dengan anggun yaitu tidak melakukan apa-apa, tetapi juga jika nilainya telah ditetapkan, lalu tetapkan.
- Gagal dengan anggun yaitu tidak melakukan apa-apa jika nilainya telah ditetapkan ... lakukan sesuatu (ini hanya lebih dari satu tugas).
Di bawah ini adalah 4 pendekatan
Menggunakan pembukaan paksa akan macet jika Anda tidak memiliki nilai. Anda ingin melakukan ini jika memiliki nilai itu sangat penting, misalnya judul film (setiap film HARUS memiliki nama). !
digunakan untuk membuka bungkus paksa.
movieTitle = movie.title!
Menggunakan penggabungan nil adalah cara lain yang akan memberi Anda lebih banyak kontrol , yang berarti tidak akan macet jika nilainya tidak disetel, juga tidak akan 'tidak disetel apa-apa' jika tidak disetel ... itu akan melakukan apa yang Anda perintahkan. untuk melakukan misalnya akan default / mengatur nama film ke untitled_movie jika tidak ada nama yang ditetapkan. ??
digunakan untuk penggabungan nol.
var movieTitle = movie.title ?? "untitled_Movie"
Menggunakan Rangkaian opsional tidak akan melakukan apa pun jika Anda tidak memiliki nilai, dan akan menyetel nilai jika Anda memiliki nilai. Anda melakukan ini untuk sesuatu yang nilainya tidak begitu penting, misalnya untuk nama agen aktor Anda . ?
digunakan untuk rangkaian opsional.
let agent = movie.leadActor?.agent
let agent = movie.leadActor!.agent
Menggunakan if-let
(atau guard
yang merupakan dua jenis pengikatan opsional ) akan memberi Anda lebih banyak kontrol , tidak akan mogok jika nilainya tidak disetel. Jika nilainya ditetapkan, maka Anda dapat melakukan sesuatu. Jika tidak disetel, Anda dapat menambahkanelse
pernyataan.
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
Ini adalah cara membuka bungkus yang paling umum digunakan, karena membuka bungkus secara paksa agak tidak disarankan. Untuk diskusi lebih lanjut tentang mengapa hal itu tidak disarankan, lihat di sini . Untuk perbandingan yang bagus antara guard
dan if-let
lihatguard vs. if-let
Catatan samping:
Penjilidan opsional dan rantai opsional biasanya digunakan bersama:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
}