È possibile definire una proprietà del blocco Objective-C ma avere ancora il completamento del codice completo in Xcode 4?Proprietà del blocco Objective-C con il completamento del codice Xcode
Se uso un typedef per definire il blocco:
typedef void (^CompletionBlock)(MyObject *myObj);
e quindi definire la proprietà:
@property (nonatomic, copy) CompletionBlock completionBlock;
e poi @synthesize
la proprietà non ho ricevuto il codice completo completamento quando si chiama il setter. Xcode utilizzerà typedef e, a causa di ciò, il completamento del codice non utilizza la sintassi completa del blocco completa con i parametri del blocco, utilizza typedef.
Se definisco un metodo prototipo nell'intestazione che utilizza la sintassi del blocco completo invece del typedef:
@property (nonatomic, copy) void (^completionBlock)(MyObject *myObj);
e poi uso @synthesize
, il setter fornito si avvicina utilizzando il completamento del codice completo sintassi ma cruciale lascia fuori i nomi dei parametri:
[self setCompletionBlock:(void (^)(MyObject *)) { ... }
Infine, se cerco di @synthesize
e quindi ignorare l'attuazione setter o mettere il prototipo nell'intestazione:
- (void)setCompletionBlock:(void (^)(MyObject *myObj))completionBlock {...}
Un avviso viene sollevato affermando che il tipo di proprietà non corrisponde al tipo di accesso. Non importa quanto cerco di sintetizzare la sintassi, non sono in grado sia di definire una proprietà di blocco che un setter che abbia la sintassi completa per il completamento del codice. Posso avere la mia torta e mangiarla anch'io?
Grazie!
E harkens la domanda ... perché 'typedef' a tutti? Per funzionalità ridotte e una linea di codice semi-ridondante? Forse questo è il modo di dire di Apple ... ___ "non farlo!" ___ ?? –