pasando parámetro

Escribí un método con un parámetro de salida:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(out)messageCondent
{   
    messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];
}

Luego pasé el parámetro así:

NSString *messageCondent;
NSString *mode = [myclassobject messageDecryption:message outParam:messageCondent];

Sin embargo, existe un problema. El valor del parámetro de salida no se está configurando correctamente. ¿Alguien puede ayudarme a hacer esto correctamente?

preguntado el 16 de mayo de 11 a las 17:05

¿No debería especificar un tipo? outParam: (fuera NSString *)? -

En realidad nunca he visto esto out método utilizado antes. Creo que la mayoría de la gente simplemente implementa el valor por referencia. (Marque la respuesta correcta en esta página: discusiones.apple.com/thread/1502936?threadID=1502936) -

Tener en cuenta que pasar por referencia en Cocoa / iOS se limita en gran medida a NSError**. Si necesita devolver más de un valor a la vez, eso requiere una estructura o, más a menudo, una clase. -

out es una palabra clave en Objective-C que estaba relacionada con Objetos distribuidos. Ya no se usa mucho. -

2 Respuestas

Cree el método para aceptar un puntero al objeto.

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(NSString**)messageCondent
{   
    *messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];

}

Pase la referencia al objeto local.

NSString *messageCondent = nil;
NSString *mode = [myclassobject messageDecryption:message outParam:&messageCondent];

contestado el 16 de mayo de 11 a las 21:05

y para dar un tipo explícito al parámetro. - jscs

Tenga en cuenta que el uso de parámetros out en Objective-C es extremadamente raro; bastante limitado solamente NSError**... - bbum

¿Existe algún problema importante sin nuestro parámetro? - Vipin

Un "parámetro de salida" es, por definición, un puntero a un puntero.

Tu método debería verse así:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(NSString **)messageCondent
{   
    *messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];
}

Esto elimina la referencia del puntero pasado para obtener la referencia del objeto real y luego lo asigna a lo que sea [receivedMessage substringFromIndex:2] devoluciones.

Invocar este método es bastante simple:

NSString *messageCondent = nil;
NSString *mode = [myclassobject messageDecryption:message outParam:&messageCondent];

contestado el 16 de mayo de 11 a las 22:05

No, un "parámetro de salida" es un puntero a un valor. Que el valor sea un puntero solo es cierto si el valor es un objeto. Pero bien podría ser un int - Thomas Tempelmann

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.