gpt4 book ai didi

ios - NSPredicate 参数过多。很难读懂

转载 作者:行者123 更新时间:2023-11-28 20:04:29 27 4
gpt4 key购买 nike

我刚刚遇到了一些与清晰代码相关的问题。我在项目的许多模块中使用谓词。当我处理核心数据时,NSPredicates 对检索过滤对象非常有帮助。

但是当我使用它时,谓词对逻辑有好处,但对代码可读性不利。

让我们看看这个例子:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(ANY option.playerzoneID == %d) \
AND (ANY option.gameId == %@) \
AND (team.teamID == %@) \
AND (league.leagueID == %@) \",
zoneIdType,
SELECTED_GAME.gameID,
SELECTED_TEAM.teamID,
SELECTED_LEAGUE.leagueID];

当我查看这个谓词时,我对这个结构有点困惑,即使这个谓词是我一周前写的。

有什么建议可以使这段代码更具可读性吗?

我认为有这样的东西会更好:

[predicate setParametr:@"gameID == %@", SELECTED_GAME.gameID];
[predicate setParametr:@"league.leagueID == %@", SELECTED_LEAGUE.leagueID];

最佳答案

您可以探索以下内容:

+ (NSPredicate *)andPredicateWithSubpredicates:(NSArray *)subpredicates
+ (NSPredicate *)orPredicateWithSubpredicates:(NSArray *)subpredicates
+ (NSPredicate *)notPredicateWithSubpredicate:(NSArray *)subpredicate

有了它,您实际上可以形成短谓词并将它们与数组连接在一起。所以,您并没有完全得到您想要的,但它是一个接近的镜头。

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"(ANY option.playerzoneID == %d)", zoneIdType];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"(ANY option.gameId == %d)", SELECTED_GAME.gameID];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"(ANY team.teamID == %@)", SELECTED_TEAM.teamID];

NSCompoundPredicate *compoundANDPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2, predicate3]];

在此处阅读更多相关信息:http://nshipster.com/nspredicate/

编辑:将 OR 谓词与 AND 谓词一起使用:


假设:您有这个谓词要添加为 OR:

NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"(ANY team.teamName == %@)", SELECTED_TEAM.teamName];

因此,您可以将 AND 和 OR 谓词分组为一个复合谓词(compoundANDPredicate,如上所示),然后使用

+ (NSPredicate *)orPredicateWithSubpredicates:(NSArray *)subpredicates

于是变成了:

[NSCompoundPredicate orPredicateWithSubpredicates:@[compoundANDPredicate, predicate4]];

关于ios - NSPredicate 参数过多。很难读懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545612/

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