Penjilidan opsional
Cepat 3 & 4
var booleanValue : Bool? = false
if let booleanValue = booleanValue, booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
Swift 2.2.0
var booleanValue : Bool? = false
if let booleanValue = booleanValue where booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
Kode let booleanValue = booleanValuekembali falsejika booleanValueada nildan ifblok tidak dijalankan. Jika booleanValuetidak nil, kode ini mendefinisikan variabel baru bernama booleanValuetipe Bool(bukan opsional, Bool?).
Kode Swift 3 & 4 booleanValue(dan kode Swift 2.2 where booleanValue) mengevaluasi booleanValue: Boolvariabel baru . Jika benar, ifblok dijalankan dengan booleanValue: Boolvariabel yang baru didefinisikan dalam cakupan (memungkinkan opsi untuk mereferensikan nilai terikat lagi di dalam ifblok).
Catatan: Ini adalah konvensi Swift untuk menamai konstanta / variabel terikat sama dengan konstanta / variabel opsional seperti let booleanValue = booleanValue. Teknik ini disebut variabel shadowing . Anda bisa keluar dari konvensi dan menggunakan sesuatu seperti let unwrappedBooleanValue = booleanValue, unwrappedBooleanValue. Saya menunjukkan ini untuk membantu memahami apa yang terjadi. Saya merekomendasikan menggunakan variabel shadowing.
Pendekatan Lainnya
Penggabungan nol
Penggabungan nol jelas untuk kasus khusus ini
var booleanValue : Bool? = false
if booleanValue ?? false {
print("optional booleanValue: '\(booleanValue)'")
}
Memeriksa falsetidak begitu jelas
var booleanValue : Bool? = false
if !(booleanValue ?? false) {
print("optional booleanValue: '\(booleanValue)'")
}
Catatan: if !booleanValue ?? falsetidak dapat dikompilasi.
Paksa buka bungkus opsional (hindari)
Buka paksa bungkusnya meningkatkan kemungkinan bahwa seseorang akan membuat perubahan di masa mendatang yang terkompilasi tetapi mengalami error saat runtime. Oleh karena itu, saya akan menghindari hal seperti ini:
var booleanValue : Bool? = false
if booleanValue != nil && booleanValue! {
print("optional booleanValue: '\(booleanValue)'")
}
Pendekatan Umum
Meskipun pertanyaan stack overflow ini menanyakan secara spesifik bagaimana cara memeriksa apakah a Bool?ada truedalam ifpernyataan, akan sangat membantu untuk mengidentifikasi pendekatan umum apakah memeriksa true, false, atau menggabungkan nilai yang tidak dibungkus dengan ekspresi lain.
Karena ungkapan menjadi lebih rumit, saya menemukan pendekatan penjilidan opsional lebih fleksibel dan lebih mudah dipahami daripada pendekatan lain. Perhatikan bahwa karya mengikat opsional dengan jenis opsional ( Int?, String?, dll).