2011-11-28 17 views
12

¿Cuál es la sintaxis para declarar una función C que devuelve un bloque Objective-C? ¿Es posible?Retorno del bloque Object Object-C desde la función C

pensé que debería ser algo así como

(void (^)(void)) myFunctionReturningABlock(); 

pero que no se compilará.

+1

Cuando dice que no funciona, ¿podría profundizar un poco ? ¿Se rompe en el tiempo de ejecución o genera un error o advertencia del compilador? Háganos saber qué significa "no funciona" y podemos ayudarlo más. – Jasarien

+1

posible duplicado de [Tipo de Bloque Objective-C como valor de retorno] (http://stackoverflow.com/questions/3948173/objective-c-block-type-as-return-value) – Ferruccio

+0

@Jasarien Lo siento, me estoy poniendo perezoso. Fijo. –

Respuesta

15

La sintaxis para su función es ligeramente incorrecta.

Como lo entiendo, debe definir su bloque como un tipo que se puede utilizar como el tipo de cambio de su función como esta:

typedef void(^MyAwesomeBlock)(void); 

MyAwesomeBlock blockFunction() 
{ 
    MyAwesomeBlock block = ^{ 
     //some code; 
    }; 

    return block; 
} 
+0

Gracias, eso funciona perfectamente. También probé la versión 'typedef-less' en el posible duplicado vinculado, pero tener un typedef lo hace mucho más claro. –

+0

¿Hay una versión typedef-less de esto? – nielsbot

+0

@nielsbot si lees el comentario que está justo encima del tuyo, verás que Nick hace referencia a un tipo sin vínculo en un comentario sobre la pregunta, más arriba en la página. Pero como dice Nick, el uso de un typedef hace que el código sea mucho más legible. Por lo general, no quieres una versión sin tipo, a menos que quieras un código desordenado e ilegible. :/ – Jasarien

Cuestiones relacionadas