Можно ли определить свойство блока Objective-C, но все еще есть полное завершение кода в Xcode 4?
Если я использую typedef для определения блока:
typedef void (^CompletionBlock)(MyObject *myObj);
а затем определите свойство:
@property (nonatomic, copy) CompletionBlock completionBlock;
а затем @synthesize
свойство я не получает полного завершения кода при вызове setter. Xcode будет использовать typedef, и из-за этого в завершении кода не используется полный синтаксис блока с параметрами блока, он использует typedef.
Если я определяю прототип метода в заголовке, который использует синтаксис полного блока вместо typedef:
@property (nonatomic, copy) void (^completionBlock)(MyObject *myObj);
а затем я использую @synthesize
, предоставленный наборщик близок к использованию полного синтаксиса завершения кода, но, в решающей степени, он не содержит имен параметров:
[self setCompletionBlock:(void (^)(MyObject *)) { ... }
Наконец, если я попытаюсь @synthesize
, а затем переопределить реализацию сеттера или поместить прототип в заголовок:
- (void)setCompletionBlock:(void (^)(MyObject *myObj))completionBlock {...}
Выдается предупреждение о том, что тип свойства не соответствует типу доступа. Независимо от того, как я пытаюсь настроить синтаксис, я не могу определить свойство блока и сеттер, который имеет полный синтаксис для завершения кода. Могу ли я получить торт и съесть его?
Спасибо!