objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?

objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?,第1张

概述有什么办法创建一个新的 NSString从格式字符串像@“xxx =%@,yyy =%@”和对象的NSArray? 在NSSTring类中有很多方法如: - (id)initWithFormat:(NSString *)format arguments:(va_list)argList- (id)initWithFormat:(NSString *)format locale:(id)local 有什么办法创建一个新的
Nsstring从格式字符串像@“xxx =%@,yyy =%@”和对象的NSArray?

在Nsstring类中有很多方法如:

- (ID)initWithFormat:(Nsstring *)format arguments:(va_List)argList- (ID)initWithFormat:(Nsstring *)format locale:(ID)locale arguments:(va_List)argList+ (ID)stringWithFormat:(Nsstring *)format,...

但不是他们以NSArray作为参数,我找不到一种方法从一个NSArray创建一个va_List …

解决方法 实际上不难从NSArray创建一个va_List。参见Matt gallagher的 excellent article主题。

这里是一个Nsstring类别做你想要的:

@interface Nsstring (NSArrayFormatExtension)+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments;@end@implementation Nsstring (NSArrayFormatExtension)+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments{    char *argList = (char *)malloc(sizeof(Nsstring *) * arguments.count);    [arguments getobjects:(ID *)argList];    Nsstring* result = [[[Nsstring alloc] initWithFormat:format arguments:argList] autorelease];    free(argList);    return result;}@end

然后:

Nsstring* s = [Nsstring stringWithFormat:@"xxx=%@,yyy=%@" array:@[@"XXX",@"YYY"]];NSLog( @"%@",s );

不幸的是,对于64位,va_List格式已经改变,所以上面的代码不再工作。并且可能不应该使用反正给它取决于格式,显然可能改变。给定没有真正可靠的方法来创建一个va_List,一个更好的解决方案是简单地将参数的数量限制在合理的最大值(例如10),然后调用stringWithFormat与前10个参数,像这样:

+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments{    if ( arguments.count > 10 ) {        @throw [NSException exceptionWithname:NSRangeException reason:@"Maximum of 10 arguments allowed" userInfo:@{@"collection": arguments}];    }    NSArray* a = [arguments arrayByAddingObjectsFromArray:@[@"X",@"X",@"X"]];    return [Nsstring stringWithFormat:format,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10] ];}
总结

以上是内存溢出为你收集整理的objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?全部内容,希望文章能够帮你解决objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1042688.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存