似乎Objective C通过篮球跳跃使得看似简单的任务非常困难。
我只需要创建一系列字符串image1.jpg
,image2.jpg
等等
即在循环中
var imgString:String='image'+i+'.jpg;
我认为最佳做法是使用NSMutableString
appendString
方法?
我做错了什么?
NSMutableString *imgString;
for(int i=1;i<=NUMIMAGES;i++){
imgString.appendString(@"image"+i+@".jpg");
}
我收到以下错误
错误:在某个结构中请求成员'appendString' 或者工会
答案 0 :(得分:37)
我无法想象在您对自己问题的“回答”中image5image4image3image2image1.jpg
中的字符串string3
如何产生问题可能被视为有用或解决方案(我将您的代码粘贴到Xcode Foundation工具项目中) w / NUMIMAGES设置为5)。
似乎Objective C跳过了箍,使看似简单的任务变得非常困难。
阅读the Objective-C Guide和the String Programming Guide,然后得出结论。批评你不理解的东西通常会适得其反(我们都已经完成了 - 但是当受挫时很容易做到。)
我只需要创建一系列字符串,image1.jpg,image2.jpg等等
#define NUMIMAGES 5
NSMutableArray *fileNames = [NSMutableArray array];
for(int i = 0; i<5; i++)
[fileNames addObject: [NSString stringWithFormat: @"image%d.jpg", i]];
NSLog(@"fileNames %@", fileNames);
输出:
fileNames (
"image0.jpg",
"image1.jpg",
"image2.jpg",
"image3.jpg",
"image4.jpg"
)
请注意,天真的解决方案没有什么特别的错误。它比必要的更脆弱,效率更低,代码更多。
将所有图像作为资源添加到您的应用程序项目中。
使用NSBundle API一次抓取所有图片的网址。
即:
NSArray *paths = [[NSBundle mainBundle] pathsForResourcesOfType: @"jpg" inDirectory: nil];
这不仅可以从代码中删除图像名称的硬编码,还可以让系统优化目录枚举和路径生成。如果你只想加载一部分图像 - 比如你正在编写游戏并拥有一系列与怪物相关的图像 - 那么将所有相关图像放在一个目录中,将目录添加到资源中,然后传递directory的名称作为上述方法的第二个参数。
所有这些 - 以及更多 - 都记录在resource programming guide。
中答案 1 :(得分:7)
首先,您调用方法的语法是关闭的 - 我建议您阅读Apples Introduction to Objective-C。值得注意的是,要调用方法,请使用[someObject someMethod]
语法。
下一个问题是你永远不会创建你想要追加的字符串,你可以使用例如[NSMutableString string]
为此。
继续,将可变字符串与某些格式化字符串连接使用-appendFormat:
,例如:
NSMutableString *imgString = [NSMutableString string];
for (int i=1; i<=NUMIMAGES; i++) {
if (i > 1) [imgString appendString:@", "];
[imgString appendFormat:@"image%d.jpg", i];
}
答案 2 :(得分:2)
我不确定你要做什么,但这可能是一个灵感:
NSMutableArray *fileNames = [NSMutableArray array];
for (int i=0; i<max; i++)
[fileNames addObject:[NSString stringWithFormat:@"image%i.jpg", i]];
至于你的错误,你正在使用点语法,它没有任何意义。此外,您不使用+
来连接Objective-C中的字符串。正确的appendString
语法如下所示:
NSMutableString *foo = [NSMutableString string];
[foo appendString:@"Hello, "];
[foo appendString:@"world!"];
正如您在第一行中看到的那样,在使用它们之前初始化对象是个好主意:)要连接字符串,您可以使用appendString
的{{1}}方法,或者您可以创建一个新的不可变字符串:
NSMutableString
如果要连接更多字符串,可以使用NSString *one = @"Hello, ";
NSString *two = [one stringByAppendingString:@"world!"];
初始值设定项:
stringWithFormat
如果您仍然认为Objective-C使某些事情变得非常困难,那么通过实际学习它可能会获得一些优势;)
答案 3 :(得分:1)
执行您想要的最简单的代码是这样的:
NSMutableString * string = [NSMutableString string];
for (int i = 1; i <= NUMIMAGES; i++) [string appendFormat: @"image%d.jpg", i];
就是这样。正如您所看到的,appendFormat:
确实让事情变得更轻松了很多!但我无法弄清楚你为什么要这样做。你会得到类似的东西:
"image1.jpgimage2.jpgimage3.jpgimage4.jpgimage5.jpg. . ."
你到底想要实现什么目标? 戴夫
答案 4 :(得分:-7)
欣赏所有答案!
有时候感觉需要成为受虐狂才能精通Objective C!
将尝试以上但最终使用
NSString *string1 = @"image";
NSString *string2;
NSString *string3 = @".jpg";
NSString *incString; //*/
for(int i=1;i<=NUMIMAGES;i++)
{
incString=[NSString stringWithFormat:@"%d",i];
string2 = [string1 stringByAppendingString:incString];
string3 = [string2 stringByAppendingString:string3];
}