我想在一个循环中追加多个字符串,但它会不断添加相同的数据。
for(int i = 0 ; i <colorsArray.count ; i++)
{
TheColor * color1 = [colorsArray objectAtIndex:i];
if([color1.isSelected isEqualToString: @"YES"])
{
if ([colorsString isEqualToString:@""])
{
colorsString = color1.colorName;
}
else
{
colorsString = [colorsString stringByAppendingFormat:@",%@",color1.colorName];
NSLog(@"Color name %@",colorsString);
}
}
}
结果第一次:红色 结果第二次:红色,红色,黄色 结果3rf时间:红色,红色,黄色,紫色
答案 0 :(得分:1)
您的问题是您每次都不要清理字符串,因此您将数据附加到上一个代码。在任何情况下,我都会为您编写最好的代码,因为您的代码有点多余:
colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
TheColor * color1 = [colorsArray objectAtIndex:i];
if([color1.isSelected isEqualToString: @"YES"])
{
colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];
NSLog(@"Color name %@",colorsString);
}
}
但是我们可以再次优化代码:如果选择的颜色是每个时间1 ,所以您没有多个选定的颜色,您可以退出for循环< / strong>当你找到那种颜色时:
colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
TheColor * color1 = [colorsArray objectAtIndex:i];
if([color1.isSelected isEqualToString: @"YES"])
{
colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];
NSLog(@"Color name %@",colorsString);
break;
}
}
另一件事:这个:[color1.isSelected isEqualToString: @"YES"]
...告诉我为什么?
您的BOOL
课程中必须有@property
TheColor
而不是字符串。所以用这个替换属性:
@property (assign, getter=isSelected) BOOL selected;
然后在你的代码中你可以做到:
if(color1.isSelected)
所以这里是最终代码:
colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
TheColor * color1 = [colorsArray objectAtIndex:i];
if(color1.isSelected)
{
colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];
NSLog(@"Color name %@",colorsString);
break;
}
}