在Objective-C中使用块

时间:2012-06-16 19:25:02

标签: objective-c objective-c-blocks

const char *sentence = "He was not in the cab at the time.";

printf("\"%s\" has %d spaces\n", sentence, (int) ^ {
    int i = 0;
     int countSpaces = 0;

    while (sentence[i] != '\0') {
        if (sentence[i] == 0x20) {
            countSpaces++;
        }
        i++;
    }    
    return countSpaces;
});

此代码只是计算字符串中的空格,但由于某种原因,它表示1606416608个空格而不是8.我不确定出了什么问题,所以感谢您的帮助!

1 个答案:

答案 0 :(得分:9)

您将实际块传递给printf,而不是块的结果。相反,尝试

const char *sentence = "He was not in the cab at the time.";

printf("\"%s\" has %d spaces\n", sentence, (int) ^ {
    int i = 0;
    int countSpaces = 0;

    while (sentence[i] != '\0') {
        if (sentence[i] == 0x20) {
            countSpaces++;
        }
        i++;
    }    
    return countSpaces;
}()); // <-- note the extra parentheses here, indicating that you're calling the block