我是Objective-C的新手,但我尝试使用HOM(higher order message)来迭代NSArray并在每个元素后附加一个字符串。
这是我的代码:
void print( NSArray *array ) {
NSEnumerator *enumerator = [array objectEnumerator];
id obj;
while ( nil!=(obj = [enumerator nextObject]) ) {
printf( "%s\n", [[obj description] cString] );
}
}
int main( int argc, const char *argv[] ) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *names = [[NSArray alloc] init];
NSArray *names_concat = [[NSArray alloc] init];
names = [NSArray arrayWithObjects:@"John",@"Mary",@"Bob",nil];
names_concat = [[names collect] stringByAppendingString: @" Doe"];
print(names_concat);
[pool release];
}
此代码有什么问题?
我的编译器(gcc)说NSArray可能不响应“-collect”
答案 0 :(得分:1)
因为方法-collect
不是标准Objective-C库的一部分!
您需要获得一些库并将其添加到您的项目中。见an article at CocoaDev。对于collect
,请参阅此blog article。
从10.6开始,Apple向NSArray
添加了一些接受块(或者换句话说是闭包)的方法。请参阅NSArray documentation并查找字词block
。
顺便说一句,在一个相当不相关的点上,请不要使用方法 cString
。这已被弃用!见NSString documentation。关于字符的编码,cString
非常糟糕。我知道你只是用它来进行调试,但是我不希望你养成使用弃用方法的习惯,尤其是关于编码的方法。
OS X通常是一个对许多编码非常友好的操作系统,但作为一个东亚人,我看到许多伟大的程序表现得很糟糕只是因为程序员使用cString
等等...只要你使用非 - 已经过时的方法。很抱歉发表不相关的评论:p