উদ্দেশ্য-সি তে পদ্ধতি সিনট্যাক্স


176

আমার জন্য এই পদ্ধতি ঘোষণার সিনট্যাক্সটি কেউ ব্যাখ্যা করতে পারেন? এই ফাংশনটিতে, ইউআইপিকারকার ভিউ (আইফোনে স্লট মেশিন ইউআই) এর সারিগুলির সংখ্যা ফিরে পাওয়া যাচ্ছে। আমার বোধগম্যতা থেকে, পদ্ধতিটিকে ' pickerView' বলা হয় , এবং একটি এনএসইন্টিজারকে ফেরত দেয়।

এটি ইউআইপিকেরভিউতে ' pickerView' নামে একটি পয়েন্টারে যায় ... প্রথমে, পদ্ধতিটিকে প্যারামিটার হিসাবে একই নাম কেন বলা হয়?

এরপরে এনএসআইন্টেগার পরামিতি রয়েছে যা উপাদানটি বলে যে আমরা কোন উপাদানটির জন্য সারিগুলি গণনা করছি। পদ্ধতির শরীরে কোনটি রয়েছে তা নির্ধারণ করার যুক্তি।

'কী numberOfRowsInComponent? এটি আমরা যে মানটি ফিরিয়ে দিচ্ছি তা বর্ণনা করে বলে মনে হচ্ছে তবে এটি পরামিতিগুলির মাঝখানে।

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component
{
    if (component == kStateComponent)
        return [self.states count];

    return[self.zips count];
}

উত্তর:


358

অবজেক্টিভ-সি পদ্ধতিগুলি স্ব নথিভুক্ত করার জন্য ডিজাইন করা হয়েছে এবং সেগুলি স্মলটকের সমৃদ্ধ traditionতিহ্য থেকে ধার করে।

আপনার এখানে কী আছে তা আমি ব্যাখ্যা করার চেষ্টা করব -(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component

  • - (NSInteger)
    এই প্রথম অংশটি ইঙ্গিত করে যে এটি একটি অবজেক্টিভ সি উদাহরণ পদ্ধতি যা কোনও এনএসআইন্টিজার অবজেক্টটি প্রদান করে। -(ড্যাশ) নির্দেশ করে যে এটি একটি হল উদাহরণস্বরূপ পদ্ধতি, যেখানে একটি +ইঙ্গিত করে যে এই একটি হল বর্গ পদ্ধতি। প্রথম বন্ধনী প্রথম মান হ'ল পদ্ধতির রিটার্ন টাইপ।

  • pickerView:
    এই অংশটি বার্তা নামের একটি অংশ । পূর্ণ বার্তা নাম এই ক্ষেত্রে হয় pickerView:numberOfRowsInComponent:। অবজেক্টিভ-সি রানটাইম এই পদ্ধতির তথ্য নেয় এবং এটি নির্দেশিত রিসিভারে প্রেরণ করে। খাঁটি সিতে এটির মতো দেখতে হবে
    NSInteger pickerView(UIPickerView* pickerView, NSInteger component)। তবে এটি যেহেতু অবজেক্টিভ-সি, তাই অতিরিক্ত তথ্য বার্তার নামতে প্যাক করে।

  • (UIPickerView*)pickerView
    এই অংশ অংশ ইনপুট । এখানে ইনপুট UIPickerView*টাইপযুক্ত এবং পিকারভিউয়ের স্থানীয় ভেরিয়েবল নাম রয়েছে।

  • numberOfRowsInComponent:
    এই অংশটি বার্তার নামের দ্বিতীয় অংশ । আপনি এখানে দেখতে পাচ্ছেন, আপনি কোনও তথ্য প্রাপকের কাছে যাচ্ছেন তা বোঝাতে সহায়তার জন্য বার্তার নামগুলি বিভক্ত হয়। সুতরাং, যদি আমি বার্তার ভেরিয়েবল foo বিন্যাস এবং বার সঙ্গে একটি বস্তু myObject ছিল, আমি টাইপ হবে:
    [myObject pickerView:foo numberOfRowsInComponent:bar];
    যেমন সি ++ শৈলী উল্টোদিকে:
    myObject.pickerView(foo, bar);

  • (NSInteger)component
    এই শেষ অংশ ইনপুট । এখানে ইনপুট টাইপযুক্ত NSIntegerএবং উপাদান একটি স্থানীয় চলক নাম আছে।


18
একটি দুর্দান্ত উত্তরের জন্য +1। আমি আপনার প্রথম বিন্দুতে "কারখানা" পরিবর্তন করে "শ্রেণি" করার পরামর্শ দেব, যেহেতু "+" আনুষ্ঠানিকভাবে কোনও শ্রেণি পদ্ধতি নির্দেশ করে। এটি ঠিক তাই ঘটে যে অনেকগুলি "+" পদ্ধতি কারখানার পদ্ধতি তবে এটি সঠিক সংজ্ঞা নয়।
জেমস

2
ধন্যবাদ! একটি অতিরিক্ত প্রশ্ন: আপনি যদি ভ্রিয়েবল foo এবং বারের মতো কোনও বস্তুর মাইবজেক্ট বার্তা পাঠাতেন: [মাইঅবজেক্ট পিকারভিউ: foo সংখ্যাঅফ্রাউজআইএন কম্পোনেন্ট: বার]; পিকারভিউ কি পদ্ধতির নাম বা প্যারামিটারকে বোঝায়?
ক্রেগ 21

2
আমরাও। পদ্ধতির নাম এবং প্যারামিটার উভয়কেই উল্লেখ করা ভাল স্টাইল, তবে পুরো পদ্ধতির নামটি আসলে পিকারভিউ: নম্বরঅফ্রাউসআইকোনম্পোনেন্ট:। আপনি যদি পিকরভিউকে আহ্বান করার চেষ্টা করেন: আপনি পদ্ধতিটি অস্তিত্ব না থাকায় আপনি রানটাইম ত্রুটিটি পেয়ে যাবেন।
লোকানিয়ানি

1
আমাকে এ সম্পর্কে স্পষ্ট করতে দাও: পিকারভিউ: নিজেই অংশটি ভাল কোডিং শৈলী অনুসরণ করতে নিম্নলিখিত প্যারামিটারটি উল্লেখ করা উচিত। তবে এটি পদ্ধতির নামের মাত্র ২/৩ টি। এর থেকে আরও ভাল উদাহরণ হতে পারে [মাই অবজেক্ট সেটএক্স: ফু ওয়াই: বার], যেখানে পদ্ধতিটি সেট করা হয়েছে এক্স: ওয়াই:।
লোকায়নি

1
আমি জানি এই উত্তরটি পুরানো, তবে আমি গত কয়েক বছর ধরে একটি নেট নেট ওয়ার্ল্ডে বাস করছি। আমি উদ্দেশ্য সি তে নতুন এবং একটি ওয়েব ওয়ার্ল্ড থেকে মোবাইল শিল্পে স্থানান্তরিত। প্রশ্নটির সাথে প্রাসঙ্গিক এমন একটি নথিভুক্ত ব্যাখ্যার জন্য আপনাকে ধন্যবাদ জানাতে চাই। +1
d3v1lman1337

52

অবজেক্টিভ-সি-তে, কোনও পদ্ধতির নাম ঘোষণার সমস্ত অংশের সমন্বয়ে গঠিত যা আর্গুমেন্ট এবং প্রকার নয়। এই পদ্ধতির নাম তাই হবে:

pickerView:numberOfRowsInComponent:

পদ্ধতিটি সি-স্টাইলের ফাংশনের সমতুল্য হবে যা নীচের মতো দেখেছে:

সম্পাদনা: ( জারেট হার্ডিকে ধন্যবাদ সহ ):

NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)

1
+1 - দুর্দান্ত সংক্ষিপ্ত বিবরণ। কখনও কখনও আমি দেখতে পাই যে লাইটব্লবটি লোকদের জন্য চলে যদি আপনি সি-স্টাইল সমতুল্য "এনএসআইঞ্জার পিকারভিউ নাম্বারঅফ্রাউজসইনকমপয়েন্ট (ইউআইপিকারিকার ভিউ * পিকারভিউ, এনএসআইন্টিগ্রে উপাদান)
জারেট হার্ডি

আমি আপনার ব্যাখ্যাটি পছন্দ করি, সিতে পুনর্লিখন করা আরও ভাল।
lcc

30

পূর্ববর্তী উত্তরগুলি যুক্ত করে, আমি কেবল এটিই বলতে চাই যে উদ্দেশ্যমূলক-সি পদ্ধতিগুলি (বা বার্তাগুলি যদি আপনি চান তবে) বাহ্যিক এবং অভ্যন্তরীণ থাকে প্যারামিটারের নাম রয়েছে।

সুতরাং এই ক্ষেত্রে:

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

numberOfRowsInComponentহয় বহিরাগত নাম, এক যে আপনি বাইরে থেকে এই পদ্ধতি কলিং ব্যবহার করেন।

আর componentহল অভ্যন্তরীণ প্যারামিটার হয়, আপনি পদ্ধতির ভেতর থেকে প্যারামিটার পড়ুন করার জন্য ব্যবহার নাম।

আশা করি এটি কিছুটা সাফ হয়ে যায়।


1
আপনার বিবরণ অনুসারে, পদ্ধতির নামটি প্রথম প্যারামিটারের বাহ্যিক নাম হিসাবে বিবেচনা করা যেতে পারে। এটি উইলকজার্জের মন্তব্য বেলোয়ের সাথেও খাপ খায়।
জেক

অভিশাপ, আমি এই উত্তরটি খুব ভুল বলে মনে করি। পরামিতিগুলির বাহ্যিক / অভ্যন্তরীণ নামের মতো কিছুই নেই। এটির TYPE এবং বৈকল্পিক সনাক্তকারী। আমি অবাক হয়েছি যে সবাই কেন ওজজিকে একটি প্রাকৃতিক ভাষা হিসাবে সংজ্ঞায়িত করার জন্য এতটা চেষ্টা করে, এটি তার সমস্ত উপায়ে একেবারেই অপ্রাকৃত। এটি একটি ভাষা, এটি চালিয়ে যায়, চারপাশে অভিনব শব্দ ব্যবহার না করে কেবল এটি শিখতে দেয়।
সিদ্ধার্থ

যুক্তিগুলির অভ্যন্তরীণ / বাহ্যিক নাম থাকতে পারে। সেটা সত্য.
lcc

21

আমার কাছে মনে হচ্ছে অবজেক্টিভ-সি পদ্ধতির স্বাক্ষরগুলি বাক্যগুলির মতো। প্রতিটি প্যারামিটার পদ্ধতির নামের একটি অংশ প্রাপ্য। উদাহরণস্বরূপ, সিতে আমরা ব্যক্তি সম্পর্কে কিছু তথ্য সেট করার জন্য একটি পদ্ধতি ( সেটপারসন ডেটা ) পেতে পারি:

void setPersonData( char* name, int age, float height ) {

এবং অবজেক্টিভ-সি-তে পদ্ধতিটি আরও বর্ণনামূলক হবে ( সেটপারসননাম: এবং এজ: এবং হাইট :), এর মতো

- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {

8
এবং কেন সেট করবে পার্সোনালডেটা (চর * এবং নাম, ইনটও এজেজ, ফ্লোট উইথ হাইওট) কেন তা বোঝায় না? সিনট্যাক্স সম্পর্কে আপনি যা বোঝেন সেগুলি সম্পর্কে এগুলিই এখানে নয়, এখানে আইজেক ডিজাইনারদের স্মার্ট হওয়ার উদ্দেশ্য সম্পর্কে কিছুই নেই। তারা কেবল আরও একগুচ্ছ সংশ্লেষ যুক্ত করেছে যা খোলামেলাভাবে কোনও বোধগম্য হয়নি .. :)
সিদ্ধার্থ

5
আপনি উত্তরটি ভূল ভেবে ভয় পেয়ে গেছেন। সেটপার্সোনালডেটা (চর * এবং নাম, ইন্ট ওএজ, ফ্লোট উইথ হাইট) একটি স্বাক্ষর, অনুরোধ নয়। এই ফাংশনটির অনুরোধটি সেট হবে পার্সনডাটা ("টম", 25, 175) - এবং এটি খুব বেশি করে বলে না? ওবজে-সি অনুরোধটি দেখতে দেখতে পাবেন: [ব্যক্তি সেটপারসননাম: @ "টম" এবং বয়স: 25 এবং উচ্চতা: 175];
wilczarz

3
এখন যেহেতু আমি এটি সম্পর্কে চিন্তা করি, আমার প্রতিক্রিয়াটি বিবৃতি চেয়ে অভিযোগ বেশি। আমি আর একমত হতে পারি না।
সিদ্ধার্থ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.