ব্লক ঘোষণার সিনট্যাক্সের তালিকা
পুরো, চলুন
return_type
বস্তুর / আদিম / ইত্যাদি ধরণের হতে হবে। আপনি ফিরে আসতে চান (সাধারণত void
)
blockName
আপনি যে ব্লকটি তৈরি করছেন তার পরিবর্তনশীল নাম হোন
var_type
টাইপ অবজেক্ট / আদিম / ইত্যাদি হোন। আপনি একটি আর্গুমেন্ট হিসাবে পাস করতে চান (কোনও পরামিতি ছাড়াই ফাঁকা ছেড়ে দিন)
varName
প্রদত্ত প্যারামিটারের পরিবর্তনশীল নাম হতে হবে
এবং মনে রাখবেন যে আপনি নিজের পছন্দমতো প্যারামিটার তৈরি করতে পারেন।
ভেরিয়েবল হিসাবে ব্লক
সম্ভবত ঘোষণার জন্য সবচেয়ে সাধারণ।
return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
// ...
};
সম্পত্তি হিসাবে ব্লক
ব্লকগুলি ভেরিয়েবল হিসাবে ঘোষণার মতো, তবে সাবটলি আলাদা।
@property (copy) return_type (^blockName) (var_type);
পরামিতি হিসাবে ব্লক
নোট করুন যে এটি "আর্গুমেন্ট হিসাবে ব্লকগুলি" থেকে পৃথক; এই উদাহরণস্বরূপ, আপনি এমন একটি পদ্ধতি ঘোষণা করছেন যা একটি ব্লক আর্গুমেন্ট চায়।
- (void)yourMethod:(return_type (^)(var_type))blockName;
যুক্তি হিসাবে ব্লক
নোট করুন যে এটি "পরামিতি হিসাবে ব্লকগুলি" থেকে পৃথক; এই উদাহরণস্বরূপ, আপনি এমন একটি পদ্ধতি কল করছেন যা একটি বেনামি ব্লক সহ একটি ব্লক আর্গুমেন্ট চায়। আপনি যদি ইতিমধ্যে একটি ব্লক ভেরিয়েবল ঘোষণা করে থাকেন তবে আর্গুমেন্ট হিসাবে পরিবর্তনশীল নামটি পাস করা যথেষ্ট pass
[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
//...
}];
নামবিহীন ব্লক
এটি কার্যত একটি বেনামি ব্লক, তবে ভেরিয়েবলগুলিকে ব্লক নির্ধারণের জন্য সিনট্যাক্সটি কেবল একটি বেনাম ব্লকের সমতুল্য ভেরিয়েবল সেট করা।
^return_type (var_type varName)
{
//...
};
typedef
বাধা
এটি আপনাকে একটি ছোট নাম সেট আপ করতে দেয় যা ব্লক ঘোষণার সময় অন্যান্য শ্রেণীর নামের মতোই উল্লেখ করা যেতে পারে।
typedef return_type (^blockName)(var_type);
এরপরে blockName
স্ট্যান্ডার্ড ব্লক ডিক্লেয়ারেশন সিনট্যাক্সের পরিবর্তে কেবলমাত্র বিকল্প হিসাবে ব্যবহার করুন।
ইনলাইন ব্লক
এটি যুক্তিযুক্তভাবে ব্লকগুলির একটি কম দরকারী ব্যবহার, তবে তা সত্ত্বেও এর জায়গা থাকতে পারে। একটি ইনলাইন ব্লক হ'ল তাত্ক্ষণিকতার পরে অবিলম্বে একটি বেনামে ব্লক।
^return_type (var_type varName)
{
//...
}(var);
ইনলাইন ব্লকগুলি স্কোপ অফসেটিংয়ের জন্য প্রাথমিকভাবে কার্যকর এবং কোডটি সাধারণ ব্রেস-ডিলিমিট অংশগুলির প্রায় সমান।
{
//...
}
পুনরাবৃত্তি ব্লক
এটি আপনাকে নিজের থেকে একটি ব্লক কল করতে দেয়, একটি লুপ তৈরি করে যা কলব্যাক এবং জিসিডি কল চলাকালীন ব্যবহৃত হতে পারে। এই ইনস্ট্যান্টেশন পদ্ধতিটি এআরসি-তে ধরে রাখার চক্র মুক্ত।
__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
if (returnCondition)
{
blockName = nil;
return;
}
// ...
} copy];
blockName(varValue);
রিটার্নিং ব্লক
একটি পদ্ধতি একটি ব্লক ফিরে আসতে পারে,
- (return_type(^)(var_type))methodName
{
// ...
}
কিছু ফাংশন হিসাবে যদি, কিছু আশ্চর্যজনকভাবে পারেন।
return_type (^FunctionName())(var_type)
{
// ...
}
Addendums
আমি যদি কিছু মিস করেছি তবে দয়া করে মন্তব্যগুলিতে আমাকে জানান, এবং আমি সেগুলি অনুসন্ধান / যুক্ত করব।
ওহ, এবং সুইফটে ...
blockName = (varName: var_type) -> (return_type)
এটি প্রায় কোনও ভাষার বৈশিষ্ট্যের মতো।