将int传递给函数,返回NSString

Geu*_*uis 0 objective-c objective-c-blocks

我对Objective-c很新,并试图更好地理解块.作为我自己的一项任务,我正在尝试用各种方法编写fizz-buzz.

我目前正在使用块,但我遇到了一个语法问题,我还没有得到.

在下面的非工作函数中,我想传入一个int并返回一种NSString.

NSString (^whichMessage)(int) = ^(int num) {
    return @"Test";
};
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误说明:

Incompatible block pointer types initializing 'NSString (^_strong)(int)' with an expression of type 'NSString *(^)(int)'
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我的示例代码的问题是什么,以及正确的形式是什么?

我在这里关注文档:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxGettingStarted.html#//apple_ref/doc/uid/TP40007502-CH7-SW1

(为了清楚起见,这是链接页面上的示例代码)

int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};
Run Code Online (Sandbox Code Playgroud)

通过页面顶部的图形,我认为通过将块类型更改为NSString并将返回类型更改为NSString,它可以正常工作.但唉,事实并非如此.

Pau*_*l.s 8

非常简单.您的块返回指向字符串而不是实际字符串的指针.我们总是使用指向对象的指针而不是实际对象本身

         |
         v
NSString *(^whichMessage)(int) = ^(int num) {
    return @"Test";
};
Run Code Online (Sandbox Code Playgroud)