динамические свойства в цели c - PullRequest
5 голосов
/ 29 сентября 2011

Я обнаружил, что свойства объекта Objective-C можно пометить как @dynamic, чтобы сообщить компилятору, что реализация будет доступна во время выполнения. Я хотел бы знать, есть ли способ сообщить компилятору, что все свойства объекта являются динамическими, без явного указания их один за другим (у меня нет списка свойств заранее). Я знаю, что это не было бы проблемой, если бы я просто использовал [object something], но для стилистических целей я хочу использовать синтаксис object.something.

Я совершенно уверен, что это невозможно сделать, но я бы хотел, чтобы кто-то это подтвердил. Поскольку это не для производственного использования, решение может включать в себя все, что вы можете себе представить.

Спасибо.

Дополнительная информация:

  • Меня волнует только работа -something (получателя), поэтому, если ваше решение не поддерживает сеттеры, это нормально.

Пример:

@interface MagicalClass : NSObject
// property 'something' is not defined!
@end

@implementation MagicalClass
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { ... }
- (void)forwardInvocation:(NSInvocation *)anInvocation { ... }
@end

MagicalClass *obj = [[MagicalClass alloc] init];
[obj something]; // compiler warning
obj.something; // compiler error

Ответы [ 3 ]

4 голосов
/ 29 сентября 2011

Это действительно не работает с объявленными свойствами.Весь смысл в том, что вы заранее объявляете, каковы ваши свойства и как вы взаимодействуете с ними.Если вам не нужно ничего декларировать, значит, у вас нет объявленных свойств.

К сожалению, он также не работает хорошо с простыми сообщениями, хотя может работать лучшечем точечный синтаксис.При статической проверке типов в Objective-C выдастся множество предупреждений, и, если какое-либо из свойств относится к необъектным типам, возможно, не удастся сгенерировать правильный вызывающий код.

Подобные вещираспространен в таких языках, как Python и Ruby, где вещи не нужно объявлять, но он не очень хорошо сочетается с Objective-C.В Objective-C доступ к произвольным атрибутам обычно осуществляется с помощью строк (см. Кодирование значения ключа и NSAttributedString ).

2 голосов
/ 29 сентября 2011

Я не верю, что это возможно.Если вы используете тип id, возможно, вы сможете отправлять необъявленные сообщения, но точечный синтаксис действительно основан на знании ваших конкретных методов доступа.

0 голосов
/ 29 сентября 2011

Я не пробовал этого, но если вы предоставляете метод получения и установки, Xcode все еще хочет директиву @synthesize или @dynamic?

Так что, если ваше свойство называется something, реализуйте-setSomething: и -something.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...