gpt4 book ai didi

arrays - Swift 谓词只匹配值数组中的第一个值

转载 作者:行者123 更新时间:2023-11-28 10:54:49 25 4
gpt4 key购买 nike

我有一个 Download 类作为 CKQueryOperation 的包装器。其中一个 init 允许我使用一组值构建我的谓词:

init(type: String, queryField: String, queryValues: [CKRecordValue], to rec: RecievesRecordable, from database: CKDatabase? = nil) {
let predicate = NSPredicate(format: "\(queryField) = %@", argumentArray: queryValues)
query = CKQuery(recordType: type, predicate: predicate)

reciever = rec
db = database

super.init()
}

当我测试它时,query 只匹配数组中的第一个值。因此,如果 queryValues = [testValue0, testValue1] 并且我有一个字段匹配 testValue0 的记录并且我有第二个匹配 testValue1 的记录,只有将发现第一个记录。如果我改变顺序,那么其他记录就会被识别。

这似乎很奇怪,我可以用一个数组创建一个谓词,但只有第一个值被匹配。文档说值按照它们出现的顺序被替换,但是不应该它还在向第二个值移动吗?

对于更多上下文,每条记录都存储在一个单独的数据库中(私有(private)与公共(public)),我的 Download 类启动两个单独的 CKQueryOperations,它们都依赖于 query ,如果 database 参数为 nil。 无论哪个操作失败,最终都找不到与第一个值匹配的结果,然后在检查第二个值之前放弃。

如果需要,我可以包含“下载”的完整代码和失败的单元测试。

最佳答案

您使用了错误的谓词。您想要使用 IN 操作。而不是对字段名称使用字符串替换,而是使用 %K 格式说明符:

let predicate = NSPredicate(format: "%K IN %@", arguments: queryField, queryValues)

请注意,NSPredicate(format:argumentArray:) 期望参数数组中的每个值在格式字符串中有一个格式说明符。由于您的格式只有一个格式说明符,因此只有第一个值是从数组中获取的。由于您使用了 =,因此该字段仅与该值进行了比较。

关于arrays - Swift 谓词只匹配值数组中的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44320266/

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