gpt4 book ai didi

swift - 使用包含谓词比较两列

转载 作者:行者123 更新时间:2023-11-28 13:30:56 25 4
gpt4 key购买 nike

我有一个包含两列的核心数据实体:artistName,字符串类型,以及与另一个实体的关系,该实体有一个列name,也是字符串类型。

我可以创建一个谓词来比较这两列,如下所示:

NSPredicate(format: "artistName == artist.name")

因此对于包含 artistName = Beyoncéartist.name = Beyoncé 的一行,此谓词返回 true。

但是,如果我将它更改为使用 contains,它就不起作用了:

NSPredicate(format: "artistName contains artist.name")

上面的代码导致了这个错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (artistName CONTAINS artist.name) (LHS and RHS both keypaths)'

我想使用 contains 创建一个谓词,该谓词将为包含 artistName = Beyoncé feat 的行返回 true。例如 Jay-Zartist.name = Beyoncé

如何使用 contains 谓词比较两列?

最佳答案

有很多关于谓词使用的文章。虽然现在是几年前... a very good article来自 NSHipster。

以下是 Apple 文档的一些链接:

您问题的答案在于错误消息LHS 和 RHS 都是键路径

已经编写了一个简单的谓词:

NSPredicate(格式:KEYPATH 比较器 KEYPATH)

在您的情况下,您应该编写一个简单的谓词:

NSPredicate(格式:KEYPATH 比较器 VALUE)


更新

我试图让我的回答简短,以鼓励 OP 发展对谓词语法的理解......但是也许需要更多解释......

你有一个核心数据实体,我猜它被命名为 Artist,具有以下内容:

  • String 类型和名称 artistName 的属性;
  • 类型艺术家(猜测?)和名称name 的关系。

您想检查 artistNamename 是否都包含 String “Beyoncé”。

你怎么能通过一次比较就做到这一点???在我看来,不可能。

你需要两个比较:

  • 检查属性 artistName 的值是否包含“Beyoncé”;
  • 检查关系 name 的值是否包含“Beyoncé”。

那么如何编写具有两个比较的“比较”谓词?

有很多方法可以做到这一点。

从长远来看,我鼓励您研究 NSCompoundPredicate 的强大功能,因为我相信它会在未来为您提供良好的服务。

与此同时,您可以使用以下语法编写“两次比较”谓词...

let predicate = NSPredicate(format: "(artistName contains 'Beyoncé') AND (name.artistName contains 'Beyoncé')")

或动态/一般...

let keypath1: String = "artistName"
let keypath2: String = "name.artistName"
let value: String = "Beyoncé"

let predicate = NSPredicate(format: "(%K contains %@) AND (%K contains %@)", argumentArray: [keypath1, value, keypath2, value])

注意事项:

  • 你必须遍历关系;和
  • 您可能需要编写 contains[cd] 以使比较不区分大小写和变音符号,从而处理诸如“é”之类的字符。

您现在可能会看到,在您的问题中,第一个 == 比较器起作用只是因为您实际上是在比较两个隐含的字符串值。第二个 contains 不起作用,因为谓词语法规则期望第二个参数是一个值(左轴是键路径,右轴是值)。 Swift 将第二个 contains 读取为“属性 artistName 包含与关系 name 关联的实体”

Diego Freniche build 了一个 playground演示谓词的使用...也许值得查看实际示例?( https://github.com/dfreniche/NSPredicate-Swift )

关于swift - 使用包含谓词比较两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350223/

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