The ObjectiveC.swift
file dari perpustakaan standar berisi beberapa baris kode berikut di sekitar baris 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Apa open var
artinya dalam konteks ini, atau apa open
kata kunci secara umum?
open
danpublic
?")Jawaban:
open
adalah tingkat akses baru di Swift 3, yang diperkenalkan dengan implementasiIni tersedia dengan snapshot Swift 3 mulai 7 Agustus 2016, dan dengan Xcode 8 beta 6.
Pendeknya:
open
kelas dapat diakses dan subclassable luar modul mendefinisikan. Anggotaopen
kelas dapat diakses dan ditimpa di luar modul pendefinisian.public
kelas dapat diakses tetapi tidak subclassable luar modul mendefinisikan. Seorangpublic
anggota kelas dapat diakses tetapi tidak dapat ditimpa di luar modul pendefinisian.Begitu
open
juga yangpublic
dulu ada di rilis Swift sebelumnya dan aksespublic
telah dibatasi. Atau, seperti yang dikatakan Chris Lattner di SE-0177: Izinkan membedakan antara akses publik dan overridability publik :Dalam contoh Anda,
open var hashValue
adalah properti yang dapat diakses dan dapat diganti dalamNSObject
subkelas.Untuk lebih banyak contoh dan detail, lihat di SE-0117 .
sumber
public
di Swift 3 sepertipublic final
di Swift 2, danopen
sepertipublic
?Baca terbuka sebagai
Saya ulangi terbuka untuk warisan di modul lain. Jadi kelas terbuka terbuka untuk subklasifikasi dalam modul lain yang mencakup modul pendefinisian. Buka vars dan fungsi terbuka untuk mengganti modul lainnya. Level akses yang paling tidak membatasi. Sebaik akses publik menerima bahwa sesuatu yang bersifat publik ditutup untuk warisan dalam modul lain.
Dari Apple Documents :
sumber
Terbuka adalah tingkat akses, diperkenalkan untuk memaksakan batasan pada kelas warisan pada Swift.
Ini berarti bahwa tingkat akses terbuka hanya dapat diterapkan ke kelas dan anggota kelas .
Di Kelas
Kelas terbuka dapat disubklasifikasikan dalam modul yang didefinisikan dan dalam modul yang mengimpor modul di mana kelas didefinisikan.
Di anggota kelas
Hal yang sama berlaku untuk anggota kelas. Metode terbuka dapat ditimpa oleh subkelas dalam modul itu didefinisikan dalam dan dalam modul yang mengimpor modul di mana metode didefinisikan.
KEBUTUHAN UPDATE INI
Beberapa kelas perpustakaan dan kerangka kerja tidak dirancang untuk disubklasifikasikan dan melakukan hal itu dapat mengakibatkan perilaku yang tidak terduga. Pustaka Apple asli juga tidak akan mengizinkan mengganti metode dan kelas yang sama,
Jadi setelah penambahan ini mereka akan menerapkan tingkat akses publik dan pribadi sesuai.
Untuk lebih jelasnya lihat di Apple Documentation on Access Control
sumber
Kecuali untuk subkelas, an
open class func
juga dapat diakses dari mana saja di proyek Anda. Katakanlah Anda mendefinisikan fungsi kelas terbuka di kelas Util Anda seperti iniKemudian di mana saja dari pengontrol tampilan Anda, Anda cukup mengakses metode ini dengan memanggil
sumber
buka datang untuk bermain ketika berhadapan dengan banyak modul.
kelas terbuka dapat diakses dan subclassable di luar modul yang mendefinisikan. Anggota kelas terbuka dapat diakses dan ditimpa di luar modul pendefinisian.
sumber
open hanya untuk modul lain misalnya: cocoa pod, atau unit test, bisa kita warisi atau timpa
sumber