2012-08-09 12 views
13

यहां मेरे पास एक स्ट्रिंग को एन्कोड करने का एक तरीका है (यह अपूर्ण है), और आप पाएंगे कि मेरी समस्या एक त्रुटि है: "गैर-फ़ंक्शन प्रकार पर ब्लॉक पॉइंटर अमान्य है""गैर-फ़ंक्शन प्रकार के लिए ब्लॉक पॉइंटर अमान्य है"

+ (NSString *)encodeString: (NSString *)string { 
    __block int indexShift; 
    __block NSString *dictionary = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    __block NSString *encodeDictionary = @"mahgbcjdfukripylswxovzetqnFMAJWGCQYXLOETPBKSVNIZUHDR"; 
    __block NSString *encodeString = @""; 

    void (^encode) = ^{ // Error here, "Block pointer to non-function type is invalid" 
     for (int x = 0; x < string.length; x++) { 
      int index = [dictionary indexOf:[string characterAtIndex:x]]; 
      indexShift += index; 
      encodeString = [encodeString stringByAppendingFormat:@"%c", [encodeDictionary characterAtIndex:index+indexShift]]; 
     } 
    }; 

    return encodeString; 
} 

कृपया मुझे बताएं कि यह क्यों हो रहा है, या इसे ठीक करने के लिए मुझे क्या बदलने की आवश्यकता है।

उत्तर

24

यह एक इनलाइन ब्लॉक घोषित करने के लिए गलत वाक्यविन्यास है। सामान्य रूप इस प्रकार है:

void(^encode)() = ^() { 

}; 
+0

हाँ ऐसा ही किया यह – Wrsford

+1

कोष्ठकों के अंतिम सेट वैकल्पिक है:

ReturnType(^block_name)(parmeter, types, here) = ^(parameter, types, here) { }; 

तो आप देख रहे हैं। यदि ब्लॉक प्रकार में कोई तर्क नहीं होता है तो आप बस '^ {}' जा सकते हैं। –

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