hata: cannot çifti bir kullanıcı ile sentezlenmiş ayarlayıcı/alıcı atom tanımlı özellik yazılabilir ayarlayıcı/alıcı
Geçenlerde eski Güncellemelerinden bir proje iyi derlemek için kullanılan () derlemek için çalıştı, ve şimdi bu formun çok fazla hata görüyorum:
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
Bu hatalara neden olan bir kod deseni her zaman bu gibi görünüyor:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
Hata oluşturulur anlayabiliyorum. Ben derleyici özelliği benim set (her iki alıcı ve ayarlayıcı) sentezlemek için söyle, ve o zaman ayarlayıcı manuel hemen sonra. Bu kod her zaman biraz kokuyordu.
Bu yapmak için doğru yolu nedir? @synthesize
yerine @dynamic
kullanırsam getter şey yazmak zorunda kalacağım. Bunun tek yolu nedir?
CEVAP
Aynı sorun bende de vardı ve biraz araştırma yaptıktan sonra, burada bu konuda benim vardığım sonuç şudur:
Derleyici olarak atom bildirdiğiniz @property
(nonatomic
anahtar unutulduğunda yani) hakkında uyarır, henüz bu özellik erişimi eşitlemek için ne kadar eksik bir uygulama sağlamak.
Bu uyarı yok yapmak için:
Eğer @property
bir atom olmak bildirirseniz aşağıdakilerden birini yapın:
@dynamic
kullanın veya;@synthesize
kullanım ve sentez ayarlayıcı ve bir alıcı ya; devam et- manuel bir uygulama sağlarher ikisi debelirleyici ve alıcı (yukarıdaki yönergeleri kullanarak olmadan).
(nonatomic)
@property
bildirirseniz daha sonra alıcıları ve ayarlayıcıları manuel ve sentez uygulamaları karıştırabilirsiniz.
Güncelleme: Mülk üzerinde Bir Not Otomatik Sentezi
LLVM itibariyle 4.0, Çınlama @dynamic
olmadığını ilan özellikleri için otomatik sentez sağlar. Eğer dışarı @synthesize
gidersen bile varsayılan olarak, derleyici sizin için alıcı ve ayarlayıcı yöntemleri sağlayacaktır. Ancak, atomik özellikler için kurallar hala aynıdır: her İki derleyici sunalımher ikisi dealıcı ve ayarlayıcı, YA da onları uygulamakher ikisi dekendinize!
Boolean bir alan için, alıcı/ayarlayıc...
Nasıl bir alıcı ya da ayarlayıcı gelen...
Basit bir Alıcı/Ayarlayıcı yorumlar...
Alıcı ve Ayarlayıcı?...
Swift Programlama: saklı özelliğinde a...