gpt4 book ai didi

swift - 在 swift 中查询 sqlite 数据库的更好方法

转载 作者:可可西里 更新时间:2023-11-01 02:02:05 25 4
gpt4 key购买 nike

我正在玩文字游戏,并使用 sqlite 数据库捆绑了完整的英语单词列表。我试图找到在数据库中搜索给定字符串以确定它是否是一个词的最佳方法。

此时我可以将整个数据库放入一个数组中:

func fetchWords() {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext {

let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord")

do {
englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord]

print(englishWords[123323].word)
//Prints "injustices"

} catch {
//error handling
}
}
}

现在。我真正想做的是传入一个给定的字符串,看看它是否作为一个词存在于我的数据库中。我有一个笨拙的谓词解决方案,例如:

func fetchWordsToArray() {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext {

let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord")

let searchWord = ["dastardly"]
let searchPredicate = NSPredicate(format: "word = %@", argumentArray: searchWord)

do {
englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord]

let resultFilteredByPredicate = (englishWords as NSArray).filtered(using: predicate)
print(resultFilteredByPredicate)

} catch {
//error handling
}
}

}

但为了使用过滤函数,我必须转换为 NSArray,这意味着我不能直接处理结果(例如,获取 resultFilteredByPredicate.word)。

而且我感觉我的处理方式可能完全错误。由于所有内容都必须首先进入数组,所以我首先肯定会失去使用 sqlite 数据库的很多值(value)。

有什么建议的方法可以更好地使用数据库吗?

非常感谢您的帮助!

最佳答案

要让数据库进行过滤(然后可以使用索引自动优化),put a predicate on the original fetch request :

    let formatRequest : NSFetchRequest<Word> = Word.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "word == %@", searchWord)
let fetchedResults = try context.fetch(fetchRequest) as! [Word]

但 Core Data 是一个管理您的对象的框架。如果你决定你的词不是对象而只是值,你可以用其他一些直接执行 SQL 的库替换 Core Data,并改为执行 SQL 查询:

SELECT * FROM EnglishWord WHERE word = ?

关于swift - 在 swift 中查询 sqlite 数据库的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45559042/

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