在for循环中附加到NSMutableString

时间:2015-01-09 15:57:32

标签: ios objective-c nsstring

NSMutableString*  highlightedString = [NSMutableString stringWithCapacity:1];
for (QWZTerm* term in self.highlightArray) {
    [highlightedString stringByAppendingFormat:@"%@ ", term.value];
}

基本上,term.values是NSStrings(" john"" mary"我想像#34; john mary"那样追加它们。不幸的是上面没有'对我有用。我会欣赏任何指示。

4 个答案:

答案 0 :(得分:5)

您使用了错误的方法:stringByAppendingFormat:适用于所有字符串,可变和不可变,因为返回一个新的NSString对象。

由于您希望更改可变highlightedString本身的内容,因此您需要使用appendFormat:代替:

NSMutableString*  highlightedString = [NSMutableString stringWithCapacity:1];
for (QWZTerm* term in self.highlightArray) {
    [highlightedString appendFormat:@"%@ ", term.value];
}

你可以在一行代码中不使用可变字符串或循环来完成整个事情:

NSString* res = [[highlightArray valueForKey:@"value"] componentsJoinedByString:@" "];

valueForKey调用背后的“魔力”描述为here

答案 1 :(得分:2)

另一种解决方案是将字符串收集在一个可变数组中然后加入它们:

NSMutableArray* values = [NSMutableArray array];
for (QWZTerm* term in self.highlightArray) {
    [values addObject:term.value];
}

NSString* highlightedString = [values componentsJoinedByString:@" "];

这可以避免使用appenFormat:解决方案获得的尾随空格。

答案 2 :(得分:1)

你的功能错了。使用appendFormat:stringByAppendingFormat:返回一个新的NSString对象,并不附加到NSMutableString实例。

NSMutableString*  highlightedString = [NSMutableString stringWithCapacity:1];
for (QWZTerm* term in self.highlightArray) {
    [highlightedString appendFormat:@"%@ ", term.value];
}

答案 3 :(得分:0)

您也可以更改

[highlightedString stringByAppendingFormat:@"%@ ", term.value];

highLightedString = [highlightedString stringByAppendingFormat:@"%@ ", term.value];