2011-11-24 4 views
6

He aquí un fragmento de código de mi aplicación para iOS:¿Cómo se ajusta la autodentación de Xcode de los parámetros del objetivo C?

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Do you like my hat?" 
                message:@"If so, please help spread the word by rating our app now?" 
                delegate:nil 
              cancelButtonTitle:@"No Thanks" 
              otherButtonTitles:@"Sure!", @"Maybe Later", nil 
          ]; 

¿Por qué sangrar líneas Xcode tan sangrienta lejos? Siendo un viejo Perl, Ruby, y el mono JavaScript, estaría más inclinado a sangrar de forma manual como esto:

UIAlertView *alert = [[UIAlertView alloc] 
     initWithTitle:  @"Do you like my hat?" 
     message:   @"If so, please help spread the word by rating our app now?" 
     delegate:   nil 
     cancelButtonTitle: @"No Thanks" 
     otherButtonTitles: @"Sure!", @"Maybe Later", nil 
    ]; 

Así que los nombres y valores de los parámetros son todos alineado a la izquierda, y la sangría solo nivel (4 espacios para mi). Esto usa mucho menos espacio en la pantalla, y es menos probable que tenga que ocuparme de las líneas de envoltura (lo que hace que las palabras indebidas de extrema derecha sean aún más difíciles de leer) en mi MacBook Air.

Sin embargo, supongo que hay alguna razón por la que Apple prefiere el primer método, y por lo tanto tiene la sangría de Xcode de esa manera. ¿O está ahí?

así que tengo dos preguntas:

  • ¿Cómo prefiere a los parámetros del método de sangría en el código Objective C?
  • ¿Cómo se ajusta Xcode para formatear con su estilo de sangría preferido?

No estoy tratando de comenzar una guerra santa aquí; Tengo más curiosidad acerca de cuáles tienden a ser las mejores prácticas entre los programadores de Objective-C, cómo Xcode ayuda con esas prácticas y para averiguar si hay una buena razón para la forma predeterminada en que Xcode lo hace.


Actualización: comentaristas y respuestas señalan que el formato predeterminado alinea los parámetros en sus dos puntos. Debería haber recordado eso antes de publicarlo, ya que por supuesto lo he notado, y cuando el artículo más largo no está muy sangrado, puede verse bastante bien. Pero me parece que, por lo general, el artículo más largo es sangría bastante. Por ejemplo:

UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"Do you like my hat?" 
           message:@"If so, please help spread the word by rating our app now?" 
           delegate:nil 
         cancelButtonTitle:@"No Thanks" 
         otherButtonTitles:@"Sure!", @"Maybe Later", nil 
         ]; 

¿Por qué es eso? Incluso si quisiera que se alineen en los dos puntos (y a menudo los he formateado a mano para que lo hagan), parece absurdo sangrarlos tanto. ¿Por qué insiste en sangrar al nivel del colon inicial? ¿Por qué no solo un nivel de sangría, con el paréntesis de cierre superado para mostrar el final del "bloque" de sangría? Por ejemplo:

UIAlertView *alert = [[UIAlertView alloc] 
     initWithTitle:@"Do you like my hat?" 
       message:@"If so, please help spread the word by rating our app now?" 
      delegate:nil 
    cancelButtonTitle:@"No Thanks" 
    otherButtonTitles:@"Sure!", @"Maybe Later", nil 
]; 

Esto parece ser un defecto mejor que the Google style guide's line length recommendation, ¿no?

¿Hay alguna manera de ajustar Xcode para formatear los parámetros de esta manera?

+0

"¿Cómo prefiere aplicar la sangría ..." es [no es una buena pregunta StackOverflow] (http://stackoverflow.com/faq#dontask). En cuanto a "Cómo ajustar Xcode ...", no hay ninguna opción para hacerlo sangrar selectores de múltiples líneas de manera diferente. –

+0

FWIW, puede obtener un comportamiento similar al que desea al agregar una nueva línea antes del inicio. Realiza sangrías automáticas para alinear los dos puntos. – jrturton

+0

@robmayoff: Buen punto, gracias. He actualizado la pregunta. – theory

Respuesta

5

1) La convención de sangría de Objective-c se alinea en el signo de dos puntos cuando se proporcionan múltiples parámetros.

ejemplo

función:

- (void)functionWithOne:(NSString *)one two:(NSString *)two tree:(NSString *)three; 

tiene que ser formateado en:

- (void)functionWithOne:(NSString *)one 
        two:(NSString *)two 
        three:(NSString *)three; 

Vine de Java, y fue muy difícil para mí acostumbrarme al principio.Pero después de probarlo diferente varias veces, esta es realmente la mejor manera.

2) No creo (no estoy seguro) que pueda cambiar eso en xcode. La convención de Apple es bastante clara como es.

EDITAR: Invocaciones. Yo personalmente a empezar con el primer parámetro y alinear el resto como:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Do you like my hat?" 
               message:@"If so, please help spread the word by rating our app now?" 
               delegate:nil 
             cancelButtonTitle:@"No Thanks" 
             otherButtonTitles:@"Sure!", @"Maybe Later", nil]; 
+0

Sí, eso funciona bien para mi ojo para las declaraciones de métodos, pero no invocaciones. – theory

+0

Sí, pero esa es una indentación profunda loca, y no es amigable para pantallas angostas (como en Xcode en mi MacBook Air). – theory

+0

Verdadero de hecho. Creo que xcode es para usuarios de pantalla ancha de alta resolución: P. Programo en una MacBook Pro 15 "y sigo pensando que necesito el ancho. Todavía quiero un iMac 27": P – Justin

3

No estoy seguro de cómo dar formato en Xcode, pero dos opciones de las herramientas de formato de código son:

  1. Uso Uncristify, hay una herramienta GUI para configurarlo: UncrustifyX
  2. Use AppCode, el iOS/OSX IDE de Jetbrains - tiene formateo configurable e integrado. Ver captura de pantalla.

AppCode code formatting tool

Cuestiones relacionadas