Sebelum saya dapat menjelaskan kasus penggunaan untuk Opsional Unwrapped Secara Implisit, Anda harus sudah memahami apa Optional dan Oppt Unwrapped secara implisit di Swift. Jika tidak, saya sarankan Anda terlebih dahulu membaca artikel saya tentang opsional
Kapan Harus Menggunakan Pilihan yang Tidak Dibungkus Secara Opsional
Ada dua alasan utama bahwa seseorang akan membuat Opsional Unwrapped Opsional. Semua harus dilakukan dengan mendefinisikan variabel yang tidak akan pernah diakses ketika nil
karena jika tidak, kompiler Swift akan selalu memaksa Anda untuk secara eksplisit membuka Bungkusan Opsional.
1. Konstan Yang Tidak Dapat Didefinisikan Selama Inisialisasi
Setiap konstanta anggota harus memiliki nilai pada saat inisialisasi selesai. Kadang-kadang, konstanta tidak dapat diinisialisasi dengan nilai yang benar selama inisialisasi, tetapi masih dapat dijamin memiliki nilai sebelum diakses.
Menggunakan variabel Opsional mengatasi masalah ini karena Opsional secara otomatis diinisialisasi dengan nil
dan nilai yang nantinya akan berisi akan tetap tidak berubah. Namun, bisa jadi menyakitkan untuk terus membuka bungkus variabel yang Anda tahu pasti tidak nol. Opsional Unwrapped secara implisit mencapai manfaat yang sama dengan Opsional dengan manfaat tambahan yang tidak harus secara eksplisit dibuka di mana-mana.
Contoh yang bagus dari ini adalah ketika variabel anggota tidak dapat diinisialisasi dalam subkelas UIView hingga tampilan dimuat:
class MyView: UIView {
@IBOutlet var button: UIButton!
var buttonOriginalWidth: CGFloat!
override func awakeFromNib() {
self.buttonOriginalWidth = self.button.frame.size.width
}
}
Di sini, Anda tidak dapat menghitung lebar asli tombol hingga tampilan dimuat, tetapi Anda tahu itu awakeFromNib
akan dipanggil sebelum metode lain apa pun pada tampilan (selain inisialisasi). Alih-alih memaksa nilai untuk secara terbuka terbuka secara tidak ada gunanya di seluruh kelas Anda, Anda dapat mendeklarasikannya sebagai Pilihan yang Tidak Dibungkus Secara Implisit.
2. Ketika Aplikasi Anda Tidak Dapat Sembuh Dari Makhluk Bervariasi nil
Ini seharusnya sangat jarang, tetapi jika aplikasi Anda tidak dapat terus berjalan jika suatu variabel nil
saat diakses, itu akan membuang-buang waktu untuk mengujinya nil
. Biasanya jika Anda memiliki kondisi yang pasti benar untuk aplikasi Anda untuk terus berjalan, Anda akan menggunakan assert
. Opsional Unwrapped Implisit memiliki pernyataan untuk nil dibangun langsung ke dalamnya. Meski begitu, sering kali baik untuk membuka bungkusan opsional dan menggunakan pernyataan yang lebih deskriptif jika nihil.
Ketika Tidak Menggunakan Opsional Unwrapped Secara implisit
1. Variabel Anggota Terhitung yang Dihitung
Kadang-kadang Anda memiliki variabel anggota yang tidak boleh nol, tetapi tidak dapat ditetapkan ke nilai yang benar selama inisialisasi. Salah satu solusinya adalah dengan menggunakan Opsional Unwrapped Opsional, tetapi cara yang lebih baik adalah dengan menggunakan variabel malas:
class FileSystemItem {
}
class Directory : FileSystemItem {
lazy var contents : [FileSystemItem] = {
var loadedContents = [FileSystemItem]()
// load contents and append to loadedContents
return loadedContents
}()
}
Sekarang, variabel anggota contents
tidak diinisialisasi sampai pertama kali diakses. Ini memberi kelas kesempatan untuk masuk ke keadaan yang benar sebelum menghitung nilai awal.
Catatan: Ini sepertinya bertentangan dengan # 1 dari atas. Namun, ada perbedaan penting yang harus dibuat. Di buttonOriginalWidth
atas harus ditetapkan selama viewDidLoad untuk mencegah siapa pun mengubah lebar tombol sebelum properti diakses.
2. Di Tempat Lain
Untuk sebagian besar, Opsional Unwrapped Opsional harus dihindari karena jika digunakan secara salah, seluruh aplikasi Anda akan macet ketika diakses sementara nil
. Jika Anda tidak pernah yakin tentang apakah suatu variabel dapat nol, selalu default untuk menggunakan Opsional normal. Membuka gulungan variabel yang tidak pernah nil
tentu tidak terlalu menyakitkan.
if someOptional
.