将int传递给函数,返回NSString

时间:2012-07-19 08:55:50

标签: objective-c objective-c-blocks

我对Objective-c很新,并试图更好地理解块。作为我自己的一项任务,我正试图用各种方法写出嘶嘶声。

我目前正在使用块,但是我遇到了一个我还没有解决的语法问题。

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

NSString (^whichMessage)(int) = ^(int num) {
    return @"Test";
};

但是我收到错误声明:

Incompatible block pointer types initializing 'NSString (^_strong)(int)' with an expression of type 'NSString *(^)(int)'

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

我在这里关注文档: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;
};

通过页面顶部的图形,我认为通过将块类型更改为NSString并将返回类型更改为NSString,它可以正常工作。但是,唉,它没有。

3 个答案:

答案 0 :(得分:8)

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

         |
         v
NSString *(^whichMessage)(int) = ^(int num) {
    return @"Test";
};

答案 1 :(得分:3)

你忘记了*:

NSString* (^whichMessage)(int) = ^(int num) {
    return @"Test";
};

Objective-C仅使用指针引用的基于堆的对象。您不能像在C ++中那样声明基于堆栈的Objective-C对象。

该规则的值得注意的例外是块,它们充当Objective-C对象并且可以基于堆栈。

答案 2 :(得分:1)

您忘了明星*

NSString* (^whichMessage)(int) = ^(int num) {
    return @"Test";
};
相关问题