gpt4 book ai didi

arrays - 如何在 Swift 中使用区分大小写和不区分大小写的混合字符串避免 Array 中的重复条目?

转载 作者:行者123 更新时间:2023-11-28 09:44:35 24 4
gpt4 key购买 nike

我有一个 TableView ,它使用 Core Data 显示字符串类型的对象列表,用户可以在其中不断向同一个表中添加新对象。但是,有一个限制,即不允许添加重复项。我设法避免了相同的重复,例如:“Bank”/“Bank”。问题是我还需要像这样阻止重复项:“Bank”/“bAnk”或“Bank”/“BAnk”等等,但我不知道该怎么做。

这是我的代码:

 func checkDuplicates(catName: String) -> Bool {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
var contents = [NSManagedObject]()
var items = [String]()
let fetchRequest = NSFetchRequest(entityName: "Categories")
do {
let results = try managedContext.executeFetchRequest(fetchRequest)
contents = results as! [Items]
for item in contents {
items.append(item.valueForKey("name") as! String)
}
} catch {
print("error")
}

if items.contains(catName) {
return true
}
return false
}

它返回一个 bool 值,这样当它返回一个重复项时,我会显示一个警报,告诉用户他可以添加一个重复项。

所以有人可以帮我解决这个问题吗?

最佳答案

无需获取所有 对象来检查现有的核心数据对象。您可以创建一个获取请求使用 谓词 搜索具有给定名称的对象:

let fetchRequest = NSFetchRequest(entityName: "Categories")
fetchRequest.predicate = NSPredicate(format: "name ==[c] %@", catName)

这里的==[c]代表不区分大小写的比较。

事实上,您根本不必获取对象。你可以使用 countForFetchRequest() 检查匹配的对象:

var error : NSError? = nil
let count = managedContext.countForFetchRequest(fetchRequest, error: &error)
if count == NSNotFound {
print("error:", error!.localizedDescription)
return false
} else if count >= 1 {
return true
} else {
return false
}

这样会更有效,因为 fetch 请求被执行了作为 SQLite 级别的“SELECT COUNT ...”查询,无需获取对象存入内存。

关于arrays - 如何在 Swift 中使用区分大小写和不区分大小写的混合字符串避免 Array 中的重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009247/

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