2013-02-02 17 views
29

के हिस्से के बजाय पिछले पैरामीटर के नाम के रूप में उपयोग किया जाता है मुझे एक्सकोड 4.6 से निम्न चेतावनी मिल रही है।एक्सकोड 4.6, चयनकर्ता

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

मुझे पता है कि मैं इस चेतावनी को अक्षम कर सकता हूं, लेकिन मैं इसे ठीक करना चाहता हूं।

मेरे पास 109 ऐसी चेतावनियां हैं, इसलिए मैं स्पष्ट रूप से विधियों को बुरी तरह लिख रहा हूं।

यहां मेरी कुछ विधियां हैं।

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

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

तो, इन विधियों को लिखने का सही तरीका क्या है?

+0

यह देखना मजेदार है कि कैसे एक [मूल प्रश्न] (https://stackoverflow.com/q/14577478/8234523) केवल 12 अपवॉट प्राप्त हुए जबकि डुप्लिकेट 2 9 हो गया। उत्तर के साथ भी वही मामला। आपके पास जितना अधिक प्रतिनिधि होगा, उतना अधिक उत्साह आपको मिलेगा। – adev

उत्तर

77

आपका पहला पद्धति चयनकर्ता +addFormatPrice:: घोषित किया जाता है जैसे मानकों के साथ स्त्रीलिंग विवरण जोड़ें। रिक्त स्थान के साथ, यह लग रहा है

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

की तरह इस [NSString addFormatPrice:0.3 :YES] की तरह शुरू हो जाती है।

आपको क्या करना चाहिए वास्तव में पिछले पैरामीटर को एक नाम देना है, इस तरह के रूप

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

कौन सा तो [NSString addFormatPrice:0.3 removeCurSymbol:YES] तरह लागू किया जाएगा।

+25

चेतावनी को ठीक करने के लिए, दूसरे पैरामीटर से पहले एक जगह डालने के लिए पर्याप्त है: '- (शून्य) शोहेल्प विकल्प: (UIView *) vw: (id) dg;'। भले ही नामित पैरामीटर बेहतर विकल्प हैं, अनामित पैरामीटर अभी भी कानूनी उद्देश्य-सी वाक्यविन्यास हैं। –

+5

चेतावनी को ठीक करने के लिए, दूसरे पैरामीटर के बाद और प्रतीक से पहले एक स्थान डालने के लिए पर्याप्त है: प्रतीक। - (शून्य) शोहेल्प विकल्प: (UIView *) vw: (id) dg; –

+0

निश्चित रूप से, यदि आपका लक्ष्य केवल चेतावनियों को हटाना है। लेकिन मूल कोड लेखक जानबूझकर पैरामीटर नाम को छोड़ने की कोशिश नहीं कर रहा था, वह अभी भी बेहतर नहीं जानता था। –

1

इस तरह आप एप्पल के उदाहरण कोड से जानने के लिए इस

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

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

कोशिश करना चाहिए रहे हैं।

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

प्रारंभ के लिए, आप अपनी विधि को वाक्य में लिखने का प्रयास कर सकते हैं।

इस

applicationdidFinishLaunchingWithOptions 

की तरह तो, (UIApplication *)application और (NSDictionary *)launchOptions

+0

मैं "RemoveCurSymbol" को "removeCurSymbol" को कम करता हूं। – geowar

10

यदि आप इन्हें कई पंक्तियों में विभाजित करते हैं तो शायद आपको एक आसान समय समझ होगी?

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

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

एक ऑब्जेक्टिव-सी विधि नाम की संरचना इस तरह है:

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

है, पूर्ण विधि नाम बीच-बीच में पैरामीटर नाम के साथ टूट गया है। कोलन प्रत्येक पैरामीटर से "लेबल" अलग करते हैं; एक स्थान विधि नाम के अगले भाग से पैरामीटर नाम को अलग करता है।

आपकी विधियों में दूसरे हिस्सों, बिट्स जो दूसरे पैरामीटर का वर्णन करते हैं, गायब हैं। अभी, आपके तरीकों के नाम addFormatPrice:: और showHelpChoices:: हैं, जिनमें से दोनों कानूनी लेकिन गैर-मूर्ख हैं। जब आप उन्हें कॉल करते हैं, तो यह इस तरह दिखेगा:

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

जो यह स्पष्ट करना चाहिए कि आपके नाम बिल्कुल सही नहीं हैं।तुम बस दूसरे मापदंडों के लिए लेबल जोड़ने की जरूरत:

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

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

* "एक स्थान पैरामीटर नाम को विधि नाम के अगले भाग से अलग करता है" *: वास्तव में दूसरे पैरामीटर से पहले एक जगह डालने ': (id) dg' चेतावनी को हल करता है। (मैं मानता हूं कि नाम पैरामीटर का उपयोग करना बेहतर विकल्प है।) –

2

ऑब्जेक्टिव-सी तरीकों नामकरण के बारे में सलाह के लिए, आप इस तरह के Apple's coding guidelines for Cocoa के रूप में एक ऑब्जेक्टिव-सी शैली गाइड करने के लिए बारी चाहिए। समुदाय और ऐप्पल के ढांचे के सम्मेलनों का पालन करने वाली कोई भी शैली मार्गदर्शिका यह सुझाव देगी कि आप अपनी विधि का नाम दें कि प्रत्येक पैरामीटर का उद्देश्य विधि नाम के भीतर स्पष्ट रूप से वर्णित है।

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

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

अपने प्रोग्राम में क्या (मुझे लगता है) यह इंगित करने के लिए नाम में महत्वपूर्ण परिवर्तन पर ध्यान दें और प्रत्येक पैरामीटर क्या करता है। आपकी कक्षा विधि कुछ भी नहीं जोड़ती है - बल्कि यह एक नई स्ट्रिंग देता है। यह आपके कोड को अन्य डेवलपर्स, ऐप्पल के ढांचे, अन्य पुस्तकालयों के साथ स्वाभाविक रूप से मिश्रित करता है, जो आप उपयोग कर सकते हैं, और पठनीयता को काफी बढ़ा सकते हैं। आपके पैरामीटर का नामकरण पठनीयता को कम नहीं करता है और रखरखाव को और अधिक कठिन बनाता है।

संबंधित नोट पर, हंगेरियन नोटेशन समेत अनावश्यक संक्षेप, झटकेदार हैं और शैली में फिट नहीं हैं, और यदि आप अच्छे नामकरण प्रथाओं का पालन करते हैं तो आपको उनकी आवश्यकता नहीं होती है और बनाए रखने के लिए एक खुशी उत्पन्न होगी। तो इसे vw पर कॉल न करें, इसे view या viewToShowIn पर कॉल करें। इसे strVal पर कॉल न करें valueString या somethingSpecificallyDescribingTheNatureOfTheValueString पर कॉल करें।

संबंधित मुद्दे