gpt4 book ai didi

objective-c - NSPredicate predicateWithFormat 不评估格式说明符

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:40 24 4
gpt4 key购买 nike

我对 NSPredicate 的 predicateWithFormat: 方法有一个(对我来说)奇怪的案例。

我使用以下命令将两个 NSPredicate 实例的描述记录到控制台:

NSNumber *myNumber = [NSNumber numberWithInt:1];

NSString *predicateFormatByHand = [NSString stringWithFormat:@"self MATCHES 'chp%@_img[0-9]+\\.png'", myNumber];
NSPredicate *firstPredicate = [NSPredicate predicateWithFormat:predicateFormatByHand];

NSLog(@"firstPredicate description: %@", firstPredicate);

NSPredicate *secondPredicate = [NSPredicate predicateWithFormat:@"self MATCHES 'chp%@_img[0-9]+\\.png'", myNumber];

NSLog(@"secondPredicate description: %@", secondPredicate);

这个输出:

 firstPredicate description: SELF MATCHES "chp1_img[0-9]+.png"
secondPredicate description: SELF MATCHES "chp%@_img[0-9]+.png"

我希望这些描述是相同的。

有人可以解释为什么他们不是吗?

(在 this question 之后,我为嵌入式单引号使用了各种转义序列,但是这样做时,NSPredicate 一直提示它无法解析格式字符串。我很高兴知道发生了什么。 )

更新:一个答案表明这是使用 NSNumber 而不是 int 的问题,所以:

NSPredicate *thirdPredicate = [NSPredicate predicateWithFormat:@"self MATCHES 'chp%d_img[0-9]+\\.png'", [myNumber intValue]];

NSLog(@"thirdPredicate description: %@", thirdPredicate);

我最初是从这个开始的,但是可惜输出是一样的:

thirdPredicate description: SELF MATCHES "chp%d_img[0-9]+.png"

(有些东西意味着格式说明符未被评估。)

最佳答案

答案很简单:NSPredicate 使用的解析器假定引号内的任何内容都是字符串文字,并且不会尝试对其内容进行任何替换。如果您需要一个动态字符串值,则必须先构建该字符串,然后再将其替换为谓词格式字符串,如第一个示例所示。

关于objective-c - NSPredicate predicateWithFormat 不评估格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12026063/

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