Xcode omitiendo los nombres de los parameters del bloque

Tengo una propiedad de bloque que se parece a esto:

@property (nonatomic, copy) void (^indexChangeBlock)(NSInteger index); 

Cuando trato de establecer el valor para esta propiedad, el autocompletado Xcode omitirá el nombre del parámetro dejándome con algo como esto:

 [self.segmentedControl3 setIndexChangeBlock:^(NSInteger) { code }]; 

Entonces, Xcode muestra un error Parameter name omitted . Soy consciente de que puedo resolver esto agregando el nombre del parámetro manualmente para que se vea así:

 [self.segmentedControl3 setIndexChangeBlock:^(NSInteger index) { code }]; 

Mis preguntas son, ¿cómo puedo hacer que Xcode agregue los nombres de los parameters automáticamente? O en otras palabras, evite que los elimine.

solución posible:

 typedef void (^IndexChangeBlock)(NSInteger index); 

y defina su propiedad con

 @property (nonatomic, copy) IndexChangeBlock indexChangeBlock; 

y si agrega

 - (void)setIndexChangeBlock:(IndexChangeBlock)indexChangeBlock; 

todo debería funcionar

En frustración exacerbada, hice una macro consolidación de este process bruto.

 #define BlockProperty(SIGNATURE,TYPENAME,varname,Varname) typedef SIGNATURE; @property (nonatomic,copy) TYPENAME varname; - (void) set##Varname:(TYPENAME)_ 

Ahora, lo que hubiera requerido (para un autocompletado adecuado) …

 typedef void(^OnEvent)(BOOL ok,id result); @property (nonatomic,copy) OnEvent varname; - (void) setVarname:(OnEvent)_; 

es simple

 BlockProperty(void(^OnEvent)(BOOL ok, id result),OnEvent,varname,VarName); 

¡SÓLIDO un poco más fácil, less prolijo, Y obtienes el beneficio del typedef AND y no tienes que crear la statement desagradable, teóricamente innecesaria!

Si quiere reutilizar un "tipo" necesitará otro (que esta vez solo tomará TRES parameters (ya que el tipo de bloque no se puede volver a declarar).

 #define BlockProp(TYPENAME,varname,Varname) @property (nonatomic,copy) TYPENAME varname; - (void) set##Varname:(TYPENAME)_ BlockProp(OnEvent,anotherVar,AnotherVar); 

Podría crear un nuevo tipo de bloque (nombre) para cada propiedad incluso si sus firmas coinciden (usando la primera macro), pero eso es algo bruto. ¡Disfrutar!