2011-11-28 14 views
12

से वापसी उद्देश्य-सी ब्लॉक एक सी फंक्शन घोषित करने के लिए वाक्यविन्यास क्या है जो उद्देश्य-सी ब्लॉक देता है? क्या यह संभव है?सी फंक्शन

मैंने सोचा कि यह की तरह

(void (^)(void)) myFunctionReturningABlock(); 

कुछ किया जाना चाहिए लेकिन यह है कि संकलन नहीं होंगे।

+1

जब आप कहते हैं कि काम नहीं करता है, तो आप एक छोटे से विस्तार से बता सकता है ? क्या यह रनटाइम पर टूट जाता है या क्या यह एक कंपाइलर त्रुटि या चेतावनी उत्पन्न करता है? हमें बताएं कि "काम नहीं करता" का अर्थ है और हम आपकी मदद कर सकते हैं। – Jasarien

+1

[उद्देश्य-सी ब्लॉक प्रकार के वापसी मूल्य के रूप में संभावित डुप्लिकेट] (http://stackoverflow.com/questions/3948173/objective-c-block-type-as-return-value) – Ferruccio

+0

@Jasarien क्षमा करें, मुझे मिल रहा है आलसी। फिक्स्ड। –

उत्तर

15

आपके फ़ंक्शन के लिए वाक्यविन्यास थोड़ा गलत है।

मैं यह समझ के रूप में, आप एक प्रकार है जो आप इस तरह अपने कार्य के बदले प्रकार के रूप में उपयोग कर सकते हैं के रूप में अपने ब्लॉक परिभाषित करना चाहिए:

typedef void(^MyAwesomeBlock)(void); 

MyAwesomeBlock blockFunction() 
{ 
    MyAwesomeBlock block = ^{ 
     //some code; 
    }; 

    return block; 
} 
+0

धन्यवाद, यह पूरी तरह से काम करता है। मैंने लिंक किए गए संभावित डुप्लिकेट में 'टाइपिफ़-कम' संस्करण भी आज़माया, लेकिन टाइपिफ़ होने से यह बहुत स्पष्ट हो जाता है। –

+0

क्या इसका कोई टाइपिफ़-कम संस्करण है? – nielsbot

+0

@nielsbot अगर आप अपनी टिप्पणी के ऊपर ही टिप्पणी पढ़ते हैं, तो आप देखेंगे कि निक प्रश्न के ऊपर एक टिप्पणी में लिखे गए टाइपिफ़-कम से कम है, पृष्ठ को आगे बढ़ाएं। लेकिन जैसा कि निक कहता है, टाइपिफ़ का उपयोग करके कोड को और अधिक पठनीय बनाता है - आप आमतौर पर टाइपिफ़-कम संस्करण नहीं चाहते हैं, जब तक कि आप गंदे अपठनीय कोड नहीं चाहते ?? :/ – Jasarien

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