我是Objective-c的新手,正在尝试更好地理解块。作为我自己的一项任务,我正在尝试用各种方法编写冒泡-嗡嗡声。
我目前正在使用块,但我遇到了一个我还没有得到的语法问题。
在下面的非工作函数中,我想传入一个整数并返回一个类型为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,将会起作用。但遗憾的是,事实并非如此。
发布于 2012-07-19 17:00:03
很简单。您的块返回一个指向字符串的指针,而不是实际的字符串。我们总是使用指向对象的指针,而不是实际的对象本身
|
v
NSString *(^whichMessage)(int) = ^(int num) {
return @"Test";
};发布于 2012-07-19 17:00:34
你忘了一个*
NSString* (^whichMessage)(int) = ^(int num) {
return @"Test";
};Objective-C只使用指针引用的基于堆的对象。您不能像在C++中那样声明基于堆栈的Objective-C对象。
该规则一个值得注意的例外是块,它充当Objective-C对象,可以是基于堆栈的。
发布于 2012-07-19 17:00:16
你忘记了一个明星*
NSString* (^whichMessage)(int) = ^(int num) {
return @"Test";
};https://stackoverflow.com/questions/11557238
复制相似问题