ब्लॉक घोषणा सिंटेक्स की सूची
के दौरान, चलो
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;
तर्क के रूप में ब्लॉक
ध्यान दें कि यह "पैरामीटर के रूप में ब्लॉक" से अलग है; इस उदाहरण में, आप एक ऐसी विधि कह रहे हैं जो अनाम ब्लॉक के साथ ब्लॉक तर्क चाहती है। यदि आपने पहले से ही एक ब्लॉक चर घोषित किया है, तो तर्क के रूप में चर नाम को पास करना पर्याप्त है।
[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)
{
// ...
}
परिशिष्टों
अगर मैंने कुछ भी याद किया है, तो कृपया मुझे टिप्पणियों में बताएं, और मैं उन्हें जोड़ / शोध करूंगा।
ओह, और स्विफ्ट में ...
blockName = (varName: var_type) -> (return_type)
यह लगभग वैसा ही है जैसे यह एक भाषा सुविधा है।