【问题标题】:"Block pointer to non-function type is invalid"“指向非函数类型的块指针无效”
【发布时间】:2012-08-09 19:31:30
【问题描述】:

这里我有一个编码字符串的方法(它是不完整的),你会发现我的问题是一个错误:“Block pointer to non-function type is invalid”

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

请告诉我为什么会发生这种情况,或者我需要改变什么来解决它。

【问题讨论】:

    标签: objective-c encoding objective-c-blocks


    【解决方案1】:

    声明内联块的语法不正确。一般形式如下:

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

    所以你正在寻找:

    void(^encode)() = ^() {
    
    };
    

    【讨论】:

    • 最后一组括号是可选的。如果块类型不带参数,你可以直接去^ { }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多