在 for 循环中附加到 NSMutableString

Appending to NSMutableString in a for loop

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

基本上 term.values 是 NSString("john" 和 "mary",我想像 "john mary" 一样附加它们。不幸的是,上面的内容对我不起作用。我会感谢任何指导。

您使用了错误的方法:stringByAppendingFormat: 适用于所有字符串,可变的和不可变的,因为它 returns 一个新的 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调用后面的"magic"描述为here

你的功能是错误的。使用 appendFormat:stringByAppendingFormat: returns 一个新的 NSString 对象并且不会附加到那里的 NSMutableString 实例。

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

另一种解决方案是将字符串收集到一个可变数组中,然后将它们连接起来:

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

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

这避免了使用 appenFormat: 解决方案时出现的尾随 space。

你也可以换行

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

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