2013-02-02 3 views
29

Ricevo il seguente avviso da Xcode 4.6.Xcode 4.6, utilizzato come nome del parametro precedente anziché come parte del selettore

.. used as the name of the previous parameter rather than as part of the selector 

So che posso disattivare questo avviso, ma preferirei risolvere il problema.

Ho 109 avvisi simili, quindi ovviamente sto scrivendo male i metodi.

Ecco un paio dei miei metodi.

+(NSString*)addFormatPrice:(double)dblPrice:(BOOL)booRemoveCurSymbol; 

-(void)showHelpChoices:(UIView *)vw:(id)dg; 

Quindi, qual è il modo corretto di scrivere questi metodi?

+0

È divertente vedere come una [domanda originale] (https://stackoverflow.com/q/14577478/8234523) ha ottenuto solo 12 upvotes mentre il duplicato ha ottenuto 29. Lo stesso caso con le risposte. Indovina il numero maggiore di rep, più upvotes ottieni. – adev

risposta

77

tuo primo metodo si dichiara il selettore +addFormatPrice::. Con spazi, sembra

+ (NSString *)addFormatPrice:(double)dblPrice :(BOOL)booRemoveCurSymbol; 

Questo è invocato come [NSString addFormatPrice:0.3 :YES].

Che cosa si dovrebbe fare è in realtà dare un nome al parametro precedente, come ad esempio

+ (NSString *)addFormatPrice:(double)dblPrice removeCurSymbol:(BOOL)booRemoveCurSymbol; 

che sarebbe poi essere invocato come [NSString addFormatPrice:0.3 removeCurSymbol:YES].

+25

Per correggere l'avviso, è sufficiente inserire uno spazio prima del secondo parametro: '- (void) showHelpChoices: (UIView *) vw: (id) dg;'. Anche se i parametri con nome sono la scelta migliore, i parametri senza nome sono ancora la sintassi legale Objective-C. –

+5

Per correggere l'avviso, è sufficiente inserire uno spazio DOPO il secondo parametro e PRIMA del: simbolo. - (void) showHelpChoices: (UIView *) vw: (id) dg; –

+0

Certo, se il tuo obiettivo è solo rimuovere gli avvisi. Ma l'autore del codice originale non stava cercando intenzionalmente di omettere il nome del parametro, semplicemente non lo sapeva. –

1

questo è come si suppone di fare questo

+(NSString*)addFormatPrice:(double)dblPrice removeCurSymbol:(BOOL)booRemoveCurSymbol; 

-(void)showHelpChoices:(UIView *)vw whatEverThePurposeOf:(id)dg; 

cercare di imparare dai codice di esempio di Apple.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

per iniziare, puoi provare a scrivere il tuo metodo in una frase.

simili

applicationdidFinishLaunchingWithOptions 

poi, aggiungere la descrizione sostantivo con parametri come (UIApplication *)application e (NSDictionary *)launchOptions

+0

Avrei messo in minuscolo "RemoveCurSymbol" in "removeCurSymbol". – geowar

10

Forse ti sarà più facile capire se li dividi su più righe?

+(NSString*)addFormatPrice:(double)dblPrice 
          :(BOOL)booRemoveCurSymbol; 

-(void)showHelpChoices:(UIView *)vw 
         :(id)dg; 

di un nome del metodo Objective-C struttura è come questo:

- (returntype)firstPartOfMethodWithParameter:(type)nameOfFirstParameter secondPartOfNameWhichDescribesSecondParameter:(type)nameOfSecondParameter; 

Cioè, il nome completo metodo è rotto, con i nomi dei parametri intervallati. I due punti separano ciascuna "etichetta" dal suo parametro; uno spazio separa il nome del parametro dalla parte successiva del nome del metodo.

I metodi mancano le seconde parti, i bit che descrivono i secondi parametri. In questo momento, i nomi dei tuoi metodi sono addFormatPrice:: e showHelpChoices::, entrambi sono legali ma non idiomatici. Quando li chiami, sarà simile a questo:

[Excelsior addFormatPrice:2.0 :YES]; 
[thumpy showHelpChoices:aView :obj]; 

che dovrebbe chiarire che i tuoi nomi non sono proprio corretti.Hai solo bisogno di aggiungere le etichette per il secondo parametri:

+(NSString*)addFormatPrice:(double)dblPrice 
    removingCurrencySymbol:(BOOL)booRemoveCurSymbol; 

-(void)showHelpChoices:(UIView *)vw 
      digeridoo:(id)dg; 
+0

* "uno spazio separa il nome del parametro dalla prossima parte del nome del metodo" *: infatti inserendo uno spazio prima del secondo parametro ': (id) dg' corregge l'avviso. (Sono d'accordo che usare i parametri dei nomi è la scelta migliore). –

2

Per consigli su denominazione metodi Objective-C, si dovrebbe rivolgersi a una guida di stile di Objective-C, come Apple's coding guidelines for Cocoa. Qualsiasi guida di stile che segua le convenzioni della community e i framework Apple suggerirà di nominare il metodo in modo tale che lo scopo di ciascun parametro sia chiaramente descritto all'interno del nome del metodo.

+(NSString *)priceStringWithPrice:(double)price removeCurrencySymbol:(BOOL)removeCurrencySymbol 

-(void)showHelpChoicesInView:(UIView *)view withSomethingWithAnUndecipherableName:(id)mysteryParameter 

notare il cambiamento significativo nel nome per indicare ciò che (presumo) fa nel vostro programma e quali ciascun parametro fa. Il tuo metodo di classe non aggiunge nulla a qualcosa - piuttosto restituisce una nuova stringa. In questo modo il tuo codice si fonde in modo naturale con quello di altri sviluppatori, framework Apple, altre librerie che potresti utilizzare e migliora notevolmente la leggibilità. La mancata denominazione dei parametri riduce la leggibilità e rende la manutenibilità molto più difficile.

Su una nota correlata, le abbreviazioni non necessarie, inclusa la notazione ungherese, sono stonate e non si adattano allo stile, e se segui buone pratiche di denominazione non ne hai bisogno e produrrai codice che è un piacere da mantenere. Quindi non chiamatelo vw, chiamatelo view o viewToShowIn. Non chiamarlo strVal chiamarlo valueString o somethingSpecificallyDescribingTheNatureOfTheValueString.

Problemi correlati