16

ここに文字列をエンコードする方法があります (不完全です)。私の問題はエラーであることがわかります:「非関数型へのブロック ポインターが無効です」

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

なぜこれが起こっているのか、または修正するために何を変更する必要があるのか​​教えてください。

4

1 に答える 1

28

これは、インライン ブロックを宣言するための間違った構文です。一般的な形式は次のとおりです。

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

};

だからあなたは探しています:

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

};
于 2012-08-09T19:42:57.690 に答える