gpt4 book ai didi

iphone - 用varargs编写replaceTokensWithStrings:方法

转载 作者:行者123 更新时间:2023-12-01 19:18:24 24 4
gpt4 key购买 nike

我要执行以下操作:

["Hello <firstname> <middlename> <lastname>". replaceTokensWithStrings: 
@"firstname", someFirstName,
@"middlename", middleNameMightBeNilObject,
@"lastname", lastNameObject];

似乎由于“ nil作为终止符问题”而无法实现。

但是 NSLog也接受多个参数,并且也可以将 nil作为参数来处理:
NSString *nilValue = nil;

NSLog(@"Value of nilValue=%@", nilValue);

输出
Value of nilValue=(null)

那么如何在 replaceTokensWithStrings:...方法中实现呢?

更新:我方法的签名:
-(NSString *)replaceTokensWithStrings:(NSString *)input, ... NS_SOMETHING_SPECIAL_HERE{

最佳答案

NSLog计算其格式字符串(第一个参数,文字字符串)中格式说明符(%@%i等)的数量,以便知道应从调用堆栈中提取多少个参数。这就是为什么它可以处理nil参数的原因-它使用count终止其处理(并且顺便说一句,如果您给它提供的参数太少,为什么它通常会崩溃)。

由于您具有格式类型的字符串,因此您可以执行相同的操作-只需生成一个助手方法,该方法将对调用<something>的字符串中的replaceTokensWithStrings:元素的数量进行计数,并使用结果来限制对va_list

如果您使用NS_SOMETHING_SPECIAL作为哨兵,则方法声明中的NS_REQUIRES_NIL_TERMINATION将为nil。如果要从某个地方获取参数数量,则不需要任何特殊的东西。

关于iphone - 用varargs编写replaceTokensWithStrings:方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com