Objetivo C: el método personalizado "make" similar a CLLocationCoordinate2DMake

He escrito una estructura personalizada en un file de encabezado separado. Se ve algo como esto

typedef struct RequestSpecifics { BOOL includeMetaData; BOOL includeVerboseData; } RequestSpecifics; 

Ahora quiero hacer un método personalizado de 'make', similar al método CLLocationCoordinate2DMake CLLocationCoordinate2DMake de la estructura de CoreLocation.

He intentado dos forms diferentes. Si bien ambas forms no dan errores en el file .h, recibo errores cuando quiero usar el método make.

Método 1:

 extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData); 

Lanza:

Apple Mach-O Linker

"_RequestSpecificsMake", a la que se hace reference desde:

El command Error Linker falló con el código de salida 1 (use -v para ver la invocación)

Método 2:

 extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { RequestSpecifics specifics; specifics.includeMetaData = includeMetaData; specifics.includeVerboseData = includeVerboseData; return specifics; } 

Lanza:

Apple Mach-O Linker

El command Error Linker falló con el código de salida 1 (use -v para ver la invocación)

Ejemplo de uso:

 RequestSpecificsMake(NO, NO) 

He comprobado todas las soluciones comunes para el error de Apple Macho-Linker pero nada parece funcionar o las soluciones no son relevantes.

Entonces, ¿cómo implemento correctamente el método 'make' para una estructura?

Por qué no intentas

static inline lugar de extern

 static inline RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { RequestSpecifics specifics; specifics.includeMetaData = includeMetaData; specifics.includeVerboseData = includeVerboseData; return specifics; } 

o si desea usar extern entonces debe escribirlo en el file .m.

Entonces aparentemente el método 2 debería ser la implementación y no debería estar en el file .h. Naturalmente, también necesito un file .m . Esta debería ser la forma correcta de hacerlo:

file .h

 RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData); 

file .m

 RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) { RequestSpecifics specifics; specifics.includeMetaData = includeMetaData; specifics.includeVerboseData = includeVerboseData; return specifics; } 

Al final, ¡tuve que combinar ambos methods! Además, según su apariencia, no se requiere la palabra key extern .