objective-c - मैं उद्देश्य-सी में एकाधिक पैरामीटर कैसे पास करूं?





syntax parameters methods (6)


उद्देश्य-सी में पैरामीटर नाम नहीं हैं, इसलिए कोलन के बाईं तरफ सबकुछ विधि नाम का हिस्सा है। उदाहरण के लिए,

getBusStops: forTime:

विधि का नाम है। नाम टूट गया है, इसलिए यह अधिक वर्णनात्मक हो सकता है। आप बस अपनी विधि का नाम दे सकते हैं

getBusStops: :

लेकिन यह आपको दूसरे पैरामीटर के बारे में बहुत कुछ नहीं बताता है।

मैंने उद्देश्य-सी विधि वाक्यविन्यास के बारे में कई पोस्ट पढ़ी हैं, लेकिन मुझे लगता है कि मैं किसी विधि के लिए एकाधिक नाम नहीं समझता हूं।

मैं NSString और getBusStops पैरामीटर के साथ getBusStops नामक एक विधि बनाने और NSMutableArray का रिटर्न प्रकार बनाने का प्रयास कर रहा हूं। इस तरह मैंने विधि का निर्माण किया है लेकिन यह निश्चित रूप से रनटाइम पर त्रुटियों को प्राप्त करता है:

- (NSMutableArray *)getBusStops:(NSString *)busStop
                                (NSTimeInterval *)timeInterval;

मैंने एक विधि के साथ एक और उदाहरण देखा:

-(NSInteger)pickerView:(UIPickerView *)pickerView
            numberOfRowsInComponent:(NSInteger)component

मुझे समझ में नहीं आता कि इस विधि के प्रत्येक पैरामीटर के लिए विधि का नाम क्यों है। क्या मुझे ऐसा कुछ करना चाहिए जैसा कि:

- (NSMutableArray *)getBusStops:(NSString *)busStop
                        forTime:(NSTimeInterval *)timeInterval



(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa

मुझे:

(returnTypeOfSecontArgument) secondArgumentName ;

जैसा कि अन्य भाषाओं में हम निम्नलिखित सिंटैक्स शून्य add(int one, int second) लेकिन OBJ_c में तर्क निर्दिष्ट करने का तरीका ऊपर वर्णित है




हाँ; उद्देश्य-सी विधि वाक्यविन्यास कुछ कारणों से इस तरह है; इनमें से एक यह है कि यह स्पष्ट है कि आप जो पैरामीटर निर्दिष्ट कर रहे हैं वे हैं। उदाहरण के लिए, यदि आप एक निश्चित इंडेक्स पर NSMutableArray में ऑब्जेक्ट जोड़ रहे हैं, तो आप इसे विधि का उपयोग करके करेंगे:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

इस विधि को insertObject:atIndex: कहा जाता है insertObject:atIndex: और यह स्पष्ट है कि निर्दिष्ट ऑब्जेक्ट पर ऑब्जेक्ट डाला जा रहा है।

अभ्यास में, एक स्ट्रिंग जोड़ना "हैलो, वर्ल्ड!" एक NSMutableArray इंडेक्स 5 में array कहा जाता है जिसे निम्नानुसार कहा जाएगा:

NSString *obj = @"Hello, World!";
int index = 5;

[array insertObject:obj atIndex:index];

यह विधि पैरामीटर के क्रम के बीच अस्पष्टता को भी कम करता है, यह सुनिश्चित करता है कि आप ऑब्जेक्ट पैरामीटर को पहले पास करें, फिर अनुक्रमणिका पैरामीटर। बड़ी संख्या में तर्क लेने वाले कार्यों का उपयोग करते समय यह अधिक उपयोगी हो जाता है, और तर्कों को पारित करने में त्रुटि कम कर देता है।

इसके अलावा, विधि नामकरण सम्मेलन ऐसा इसलिए है क्योंकि उद्देश्य-सी ओवरलोडिंग का समर्थन नहीं करता है; हालांकि, अगर आप एक ऐसी विधि लिखना चाहते हैं जो एक ही काम करता है, लेकिन अलग-अलग डेटा-प्रकार लेता है, तो इसे पूरा किया जा सकता है; उदाहरण के लिए, NSNumber कक्षा ले लो; इसमें कई ऑब्जेक्ट निर्माण विधियां हैं, जिनमें निम्न शामिल हैं:

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

सी ++ जैसी भाषा में, आप तर्क के रूप में अलग-अलग डेटा प्रकारों को पारित करने की अनुमति देने के लिए संख्या विधि को अधिभारित करेंगे; हालांकि, उद्देश्य-सी में, यह वाक्यविन्यास फ़ंक्शन के प्रत्येक संस्करण के लिए विधि का नाम बदलकर, उसी फ़ंक्शन के कई अलग-अलग प्रकारों को लागू करने की अनुमति देता है।




आपको प्रत्येक पैरामीटर नाम को कम से कम ":" के साथ सीमित करने की आवश्यकता है। तकनीकी रूप से नाम वैकल्पिक है, लेकिन पठनीयता के लिए इसकी अनुशंसा की जाती है। तो आप लिख सकते हैं:

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;

या आपने जो सुझाव दिया है:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;



विधि बनाने के लिए:

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}

विधि को कॉल करने के लिए:

[mymethods:self.contoCorrente withsecond:self.asecond];



मान निकाय में निर्दिष्ट होते हैं, प्रारूप में सामग्री प्रकार निर्दिष्ट करता है।

आम तौर पर सामग्री प्रकार application/x-www-form-urlencoded , इसलिए अनुरोध निकाय क्वेरी स्ट्रिंग के समान प्रारूप का उपयोग करता है:

parameter=value&also=another

जब आप फॉर्म में फ़ाइल अपलोड का उपयोग करते हैं, तो आप इसके बजाय multipart/form-data एन्कोडिंग का उपयोग करते हैं, जिसमें एक अलग प्रारूप होता है। यह अधिक जटिल है, लेकिन आपको आमतौर पर इसकी देखभाल करने की आवश्यकता नहीं होती है, इसलिए मैं एक उदाहरण नहीं दिखाऊंगा, लेकिन यह जानना अच्छा होगा कि यह मौजूद है।







objective-c syntax parameters methods