2012-08-09 10 views
13

Tutaj mam metodę kodowania ciągu znaków (jest niekompletna), a moim problemem jest błąd: "Blokuj wskaźnik do typu niefunkcyjnego jest nieprawidłowy""Wskaźnik bloku do typu niefunkcyjnego jest nieprawidłowy"

+ (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; 
} 

Proszę mi powiedzieć, dlaczego tak się dzieje lub co muszę zmienić, aby to naprawić.

Odpowiedz

24

Niepoprawna składnia deklarowania bloku śródliniowego. Ogólna postać jest następująca:

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

}; 

Więc szukasz:

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

}; 
+0

yup, że zrobił to – Wrsford

+1

Ostateczny zestaw nawiasach jest opcjonalne. Możesz po prostu "^ {}", jeśli typ bloku nie przyjmuje żadnych argumentów. –

Powiązane problemy