Mungkin ini sudah jelas, tapi saya tidak tahu bagaimana mendeklarasikan properti kelas di Objective-C.
Saya perlu cache kamus per kelas dan bertanya-tanya bagaimana memasukkannya ke dalam kelas.
objective-c
cocoa
oop
mamcx
sumber
sumber
.
sintaks -accessor tidak terikat properti di Objective-C, itu hanya disusun-in pintas untuk metode apapun yang kembali sesuatu tanpa mengambil args apapun. Dalam hal ini saya lebih suka - saya pribadi lebih suka.
sintaksis untuk setiap penggunaan di mana kode klien bermaksud untuk mendapatkan sesuatu, tidak melakukan tindakan (bahkan jika kode implementasi dapat membuat sesuatu sekali, atau melakukan tindakan efek samping) ..
Sintaks penggunaan yang berat juga menghasilkan kode yang lebih mudah dibaca: keberadaan[…]
s berarti sesuatu yang signifikan sedang dilakukan ketika mengambil.
alih menggunakan sintaks.Saya menggunakan solusi ini:
Dan saya menemukannya sangat berguna sebagai pengganti pola Singleton.
Untuk menggunakannya, cukup akses data Anda dengan notasi titik:
sumber
self
artinya di dalam metode kelas?self
adalah objek yang menerima pesan . Dan karena kelas juga objek , dalam hal iniself
berartiModel
@synchronized
?Seperti yang terlihat di WWDC 2016 / XCode 8 ( apa yang baru dalam sesi LLVM @ 5: 05). Properti kelas dapat dideklarasikan sebagai berikut
Perhatikan bahwa properti kelas tidak pernah disintesis
sumber
static
variabel ( ) masih harus dideklarasikan dan digunakan, dan metode diimplementasikan secara eksplisit, seperti sebelumnya. Sintaks dot sudah bekerja sebelumnya juga. Secara keseluruhan, ini terdengar seperti kesepakatan yang lebih besar dari yang sebenarnya.Jika Anda mencari yang setara dengan tingkat kelas
@property
, maka jawabannya adalah "tidak ada yang seperti itu". Tapi ingat,@property
itu hanya gula sintaksis; itu hanya menciptakan metode objek bernama tepat.Anda ingin membuat metode kelas yang mengakses variabel statis yang, seperti orang lain katakan, hanya memiliki sintaks yang sedikit berbeda.
sumber
UIDevice.currentDevice.identifierForVendor
bekerja untukku.Inilah cara aman untuk melakukannya:
Pengeditan ini memastikan bahwa fooDict hanya dibuat sekali.
Dari dokumentasi Apple : "dispatch_once - Menjalankan objek blok sekali dan hanya sekali seumur hidup aplikasi."
sumber
Initializer element is not a compile-time constant
.Pada Xcode 8 Objective-C sekarang mendukung properti kelas:
Karena properti kelas tidak pernah disintesis, Anda perlu menulis implementasi Anda sendiri.
Anda mengakses properti kelas menggunakan sintaks dot normal pada nama kelas:
sumber
Properti hanya memiliki nilai dalam objek, bukan kelas.
Jika Anda perlu menyimpan sesuatu untuk semua objek kelas, Anda harus menggunakan variabel global. Anda dapat menyembunyikannya dengan mendeklarasikannya
static
di file implementasi.Anda juga dapat mempertimbangkan menggunakan hubungan spesifik antara objek Anda: Anda mengaitkan peran master ke objek tertentu dari kelas Anda dan menautkan objek lain ke master ini. Master akan memegang kamus sebagai properti sederhana. Saya berpikir tentang pohon seperti yang digunakan untuk hierarki tampilan dalam aplikasi Kakao.
Pilihan lain adalah membuat objek dari kelas khusus yang terdiri dari kamus 'kelas' Anda dan satu set semua objek yang terkait dengan kamus ini. Ini seperti
NSAutoreleasePool
di Cocoa.sumber
Mulai dari Xcode 8, Anda dapat menggunakan atribut properti kelas seperti dijawab oleh Berbie.
Namun, dalam implementasi, Anda perlu mendefinisikan pengambil kelas dan penyetel untuk properti kelas menggunakan variabel statis sebagai pengganti iVar.
Sampel
Contoh.m
sumber
Jika Anda memiliki banyak properti tingkat kelas maka pola singleton mungkin dalam urutan. Sesuatu seperti ini:
Dan
Sekarang akses properti tingkat kelas Anda seperti ini:
sumber
dispatch_once
sini.[Coba solusi ini sederhana] Anda dapat membuat variabel statis di kelas Swift kemudian memanggilnya dari kelas Objective-C.
sumber