OC 简化项目中拼接字符串的方法
来源:互联网 发布:三端电容网络的变换 编辑:程序博客网 时间:2024/05/18 03:00
在做项目中,经常会有拼接字符串的需求.
比如:
如何拼接字符串能,一般我们会经过这么一个过程:
- (void)viewDidLoad { [super viewDidLoad]; //显示: 申请秒豆: ?? NSString *numStr = @"20"; NSString *tips; //初级做法. 直接使用系统API tips = [NSString stringWithFormat:@"剩余天数: %@",numStr]; //或 tips = [@"剩余天数: " stringByAppendingString:numStr]; //中级做法. 使用宏来简化#define AddStr(str1,str2) [str1 stringByAppendingString:str2] tips = AddStr(@"剩余天数: ", numStr); /* 但是遇到拼接两个以上字符串时,又变得麻烦了. 也许可以再定义一个宏,处理三个字符串的情况. 也可以像这样使用: */ tips = AddStr(@"活动", AddStr(@"剩余天数: ", numStr)); }
怎么样能够使拼接字符串变得更简单些呢?
下面直接上代码(我的Github):
最终结果:
tips = YCIJoinStrings(@"活动",@"剩余天数: ",numStr);
方案:
#import <Foundation/Foundation.h>#define YCIJoinStrings(firstStr,...) [NSString JoinedWithSubStrings:firstStr,__VA_ARGS__,nil]@interface NSString (YCI)+ (NSString *)JoinedWithSubStrings:(NSString *)firstStr,...NS_REQUIRES_NIL_TERMINATION;@end
#import "NSString+YCI.h"@implementation NSString (YCI)+ (NSString *)JoinedWithSubStrings:(NSString *)firstStr,...NS_REQUIRES_NIL_TERMINATION{ NSMutableArray *array = [NSMutableArray new]; va_list args; if(firstStr){ [array addObject:firstStr]; va_start(args, firstStr); id obj; while ((obj = va_arg(args, NSString* ))) { [array addObject:obj]; } va_end(args); } return [array componentsJoinedByString:@""]; }@end
注解:
考虑到要拼接的字符串个数不固定的因素,必须要使用va_list相关的方法
va_list
是在C语言中解决变参问题的一组宏.(具体参看:百度百科)
NS_REQUIRES_NIL_TERMINATION
因为使用va_list需要提前知道有多少个参数.这就增添了很大的不便.NS_REQUIRES_NIL_TERMINATION就是用于声明需要一个nil做结尾.就像我们使用NSArray的方法:
[NSArray arrayWithObjects:@"obj", nil];通过在va_list的结尾插入一个nil,我们就可以用nil来做结尾的判断了.避免需要提前知道参数个数的麻烦.
可参考(曾迦的简书)
__VA_ARGS__
C99有了__VA_ARGS__的支持,我们可以进一步简化调用.
0 0
- OC 简化项目中拼接字符串的方法
- OC 数组,字符串的拼接
- OC中数组与字符串的拼接与分割
- 字符串拼接 的 方法
- OC字符串分割拼接
- oc拼接字符串
- OC中字符串的方法测试
- 聚合拼接字符串的方法
- matlab拼接字符串的方法
- php中字符串的拼接
- shell 中字符串的拼接
- 字符串的常用方法—拼接字符串
- oc中一些字符串方法
- java中5种字符串拼接方法
- 简化字符串的translate方法的使用
- OC中字符串的方法使用(NSString、NSMutableString、NSRange)
- 黑马程序员--OC统计字符串中数字个数的方法
- OC字符串的常用方法
- GitHub 排名前 100 的 Android 开源库简介-liusong001
- 线性表(顺序表)的逆置(完整程序)
- 雷军北大15分钟演讲:我至少有胆量去想
- Lambda表达式详解(例子详解)
- 关于查错
- OC 简化项目中拼接字符串的方法
- mysql事务
- 安卓打开远程调试
- 双目视觉三维重建
- 单片机 温度计
- notepad快捷键
- java对象类型转换
- filter过滤器学习笔记-java
- Sass学习之快速上手bootstrap-sass