Utilizzando apple's example dalla documentazioneerrore di sintassi di blocco da esempio di Apple 'Creazione di un blocco'
float (^oneFrom)(float);
oneFrom = ^(float aFloat) {
float result = aFloat - 1.0;
return result;
};
ottengo due errori:
- Ridefinizione di 'oneFrom' con un diverso tipo: 'int' vs 'float (^) (float)'
- indicatore di tipo mancante, il default è 'int'
Als o dal doc ..
Se non si dichiara esplicitamente il valore di ritorno di un'espressione blocco , si può dedurre automaticamente dal contenuto del blocco . Se il tipo di reso è inferito e l'elenco dei parametri è nullo, , puoi anche omettere l'elenco dei parametri (void). Se o quando dichiarazioni di reso multiple sono presenti, devono corrispondere esattamente (utilizzando la fusione se necessario).
La mia comprensione era che i blocchi sono simili ai puntatori di funzione C. Non dovrei essere in grado di dichiararlo nel file di intestazione? – estobbart
@estobbart No, i blocchi sono un concetto molto più complesso dei puntatori di funzione. Più importante: trasportano i dati, quindi devono essere allocati dinamicamente nello stack o nell'heap. C non consente l'inizializzazione di oggetti con durata di archiviazione statica, quindi non è possibile definire un blocco sull'ambito del file. –
@estobbart È possibile, ovviamente, dichiarare una variabile di tipo blocco utilizzando 'extern' in un file di intestazione. Non è possibile definire un blocco, però. –