Di Swift, apa cara konvensional untuk menentukan pola umum di mana properti menjadi hanya dapat dibaca secara eksternal, tetapi dapat dimodifikasi secara internal oleh kelas (dan subkelas) yang memilikinya.
Di Objective-C, ada opsi berikut:
- Deklarasikan properti sebagai hanya-baca di antarmuka dan gunakan ekstensi kelas untuk mengakses properti secara internal. Ini adalah akses berbasis pesan, oleh karena itu berfungsi dengan baik dengan KVO, atomicity, dll.
- Deklarasikan properti sebagai hanya-baca di antarmuka, tetapi akses backing ivar secara internal. Karena akses default untuk ivar dilindungi, ini berfungsi dengan baik dalam hierarki kelas, di mana subkelas juga dapat mengubah nilainya, tetapi bidang ini hanya dapat dibaca.
Di Java konvensi adalah:
- Deklarasikan bidang yang dilindungi, dan terapkan pengambil (metode) publik hanya-baca.
Apa idiom Swift?
sumber
var
kata kunci yang hilang untuk membuatnya dikompilasi.)public
- seharusnyainternal
atau tidak sama sekali (yang default ke kelas apa pun -public
atauinternal
) - yaituprivate(set) var readonlyProperty: Int
private
sekarang membatasi ke deklarasi saat ini (bukan file) danfileprivate
tersedia untuk membatasi ke file saat ini. Jugapublic
memang memiliki beberapa batasan danopen
diperlukan tanpa batasan. Detailnya di sini .Sesuai @Antonio, kita dapat menggunakan satu properti untuk mengakses sebagai nilai
readOnly
properti secara publik danreadWrite
pribadi. Berikut ilustrasi saya:Dan inilah hasilnya:
sumber