如何在Objective-C中为数组元素拼接前后缀字符串?
刚接触Objective-C的时候确实会因为字符串拼接的方式和Android不一样有点懵,我来给你几个简单直接的方法解决数组元素加前缀/后缀的问题,刚好适合你在TableViewCell里用~
方法1:遍历数组逐个拼接(最直观易理解)
这是最适合新手上手的方式,遍历原数组的每个元素,把前缀、元素本身、后缀拼接成新字符串,再存入新数组:
// 假设原数组是存放NSString类型的元素 NSArray *originalArray = @[@"苹果", @"香蕉", @"橙子"]; NSString *prefix = @"水果:"; NSString *suffix = @"(新鲜采摘)"; NSMutableArray *resultArray = [NSMutableArray array]; for (NSString *item in originalArray) { // 用stringWithFormat:做格式化拼接,%@是OC中字符串的占位符 NSString *newItem = [NSString stringWithFormat:@"%@%@%@", prefix, item, suffix]; [resultArray addObject:newItem]; } // 此时resultArray的元素为:@"水果:苹果(新鲜采摘)", @"水果:香蕉(新鲜采摘)", @"水果:橙子(新鲜采摘)"
小贴士:stringWithFormat:就类似Android里的String.format(),你可以灵活调整占位符的位置,比如只加前缀或者只加后缀都可以。
方法2:用Block遍历数组(更贴合OC风格)
如果你想尝试更“Objective-C”的写法,可以用数组的enumerateObjectsUsingBlock:方法,代码更紧凑,还能方便获取元素索引:
NSArray *originalArray = @[@"1", @"2", @"3"]; NSString *prefix = @"编号-"; NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:originalArray.count]; [originalArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // 这里演示只加前缀,加后缀同理 NSString *newStr = [NSString stringWithFormat:@"%@%@", prefix, obj]; [resultArray addObject:newStr]; }];
如果需要给不同位置的元素加不同前缀/后缀,这个方法里的idx(索引)就能派上用场啦。
方法3:用KVC一行代码搞定(简洁高效)
如果追求代码简洁,可以利用OC的Key-Value Coding特性,一行代码生成目标数组:
NSArray *originalArray = @[@"张三", @"李四", @"王五"]; NSString *prefix = @"姓名:"; // 给所有元素加前缀 NSArray *prefixedArray = [originalArray valueForKeyPath:[NSString stringWithFormat:@"stringByAppendingString:@'%@'", prefix]]; // 给所有元素加后缀 NSString *suffix = @"先生"; NSArray *suffixedArray = [originalArray valueForKeyPath:[NSString stringWithFormat:@"'%@' stringByAppendingString:self", suffix]]; // 同时加前缀和后缀 NSArray *bothArray = [originalArray valueForKeyPath:[NSString stringWithFormat:@"'%@' stringByAppendingString:(self stringByAppendingString:@'%@')", prefix, suffix]];
注意:这个方法要求原数组的元素必须都是NSString类型,否则会报错,刚好适合你用于TableViewCell的场景。
在TableViewCell中直接使用的小技巧
如果你不想提前生成整个新数组,也可以在cellForRowAtIndexPath:方法里按需拼接,这样还能节省内存:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID" forIndexPath:indexPath]; // 获取原数组元素 NSString *originalStr = originalArray[indexPath.row]; // 直接拼接后赋值给cell的文本 cell.textLabel.text = [NSString stringWithFormat:@"%@%@%@", @"【前缀】", originalStr, @"【后缀】"]; return cell; }
这些方法都很实用,你可以根据自己的习惯和场景选择,刚学OC多写几次就熟悉啦~
内容的提问来源于stack exchange,提问作者ysnsyhn
相关产品推荐
相关产品推荐

