2011-11-24 8 views
6

Ecco un frammento di codice dalla mia app iOS:Come si modifica l'indentazione automatica di Xcode dei parametri dell'obiettivo 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 
          ]; 

Perché rientrare le righe Xcode così maledettamente lontano? Essendo un vecchio Perl, Ruby, e la scimmia JavaScript, sarei più propenso a rientrare manualmente in questo modo:

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 
    ]; 

Così i nomi ei valori dei parametri sono tutti solo un livello allineato a sinistra, e frastagliata (4 posti per me). Questo utilizza molto meno spazio sullo schermo, ed è meno probabile che dovrò occuparmi delle linee di wrapping (che rendono le cose di indentazione estrema-destra ancora più difficili da leggere) sul mio MacBook Air.

Tuttavia, presumo che ci sia qualche ragione per cui Apple preferisce il primo metodo, e quindi ha il rientro Xcode in questo modo. O c'è?

Così ho due domanda:

  • Come si preferisce parametri del metodo di rientro nel codice Objective C?
  • Come si modifica Xcode per formattare con lo stile di indentazione preferito?

Non tentare di iniziare una guerra santa qui; Sono più curioso di sapere quali tendono ad essere le migliori pratiche tra i programmatori di Objective-C, come Xcode aiuta con quelle pratiche e per scoprire se esiste una buona ragione per il modo predefinito in cui Xcode lo fa.


Aggiornamento: Commentatori e risposte sottolineano che la formattazione predefinita allinea i parametri a loro i due punti. Avrei dovuto ricordarlo prima di postare, dal momento che ovviamente l'ho notato, e quando l'oggetto più lungo non è molto rientrato, può sembrare molto carino. Ma trovo che, di solito, l'articolo più lungo sia rientrato parecchio. Ad esempio:

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 
         ]; 

Perché è? Anche se volevo che fossero allineati ai due punti (e spesso li ho formattati a mano per farlo), sembra sciocco indentarli così tanto. Perché insiste nel rientrare al livello del colon iniziale? Perché non un solo livello di indentazione, con la parentesi chiusa sporgente per mostrare la fine del "blocco" della rientranza? Per esempio:

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 
]; 

Questo sembra essere un difetto meglio di the Google style guide's line length recommendation, no?

C'è un modo per modificare Xcode per formattare i parametri in questo modo?

+0

"Come si preferisce rientrare ..." è [non è una buona domanda StackOverflow] (http://stackoverflow.com/faq#dontask). Per quanto riguarda "Come si modifica Xcode ...", non ci sono opzioni per far rientrare automaticamente i selettori multi-linea in modo diverso. –

+0

FWIW, è possibile ottenere un comportamento simile a quello desiderato aggiungendo una nuova riga prima dell'iniz. Indica automaticamente per allineare i due punti. – jrturton

+0

@robmayoff: buon punto, grazie. Ho aggiornato la domanda. – theory

risposta

5

1) La convenzione del rientro Objective-c è allineata al segno dei due punti quando vengono forniti più parametri.

esempio

funzione:

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

deve essere formattato per:

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

sono venuto da Java, ed è stato davvero difficile per me abituarmi a un primo momento.Ma dopo averlo provato diverse volte, questo è davvero il modo migliore.

2) Non penso (non sono sicuro) che sia possibile modificarlo in xcode. La convenzione di Apple è abbastanza chiara com'è.

MODIFICA: Invocazioni. Io personalmente inizio con il primo parametro e allineare il resto come:

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ì, questo funziona bene ai miei occhi per le dichiarazioni di metodo, ma non per le invocazioni. – theory

+0

Sì, ma questa è una profonda indentazione e non amichevole per gli schermi stretti (come in Xcode sul mio MacBook Air). – theory

+0

Vero davvero. Penso che xcode sia per gli utenti di wide-rez wide screen: P. Io programma su un MacBook Pro 15 "e penso ancora che mi serve la larghezza. Voglio ancora un iMac 27": P – Justin

3

Non sono sicuro di come formattare in Xcode, ma due opzioni per strumenti di formattazione di codice sono:

  1. Usa Uncristify, c'è uno strumento GUI per configurarlo: UncrustifyX
  2. Usa AppCode, l'IDE iOS/OSX di Jetbrains - ha una formattazione configurabile e integrata. Vedi screenshot.

AppCode code formatting tool

Problemi correlati