gpt4 book ai didi

swift2 - Swift 2 中带有谓词的 Realm 搜索数据库

转载 作者:行者123 更新时间:2023-12-04 23:18:46 25 4
gpt4 key购买 nike

我在 Swift2 中编写了一个 (Mac) 应用程序,它应该搜索具有特定主题的教师 Realm 数据库。 Realm 中教师对象的定义如下所示:

class Teacher: Object {
var subjects = List<Subject>()
}

这个类很复杂所以我删除了一些行...

这是 的函数应该过滤具有特定主题的教师的数据库并仅返回教师姓名(作为字符串数组: [String]):
func getAllTeacherNamesForSubject(subject: String) -> [String] {
// Open Database
let realm = openRealmDatabase()

// Or open it this way:
// RLMRealm.setDefaultRealmPath("/Users/name/Data.realm")
// var realm: Realm!
// realm = try! Realm()

// filter the Database with Predicate
let objects = realm.objects(Teacher).filter("!!! Need Help !!!", subject)
// How can I filter the Database? I want to get all the Teachers for that subject

// Make an Array of Objects
let objectsArray = objects.toArray(Teacher) as [Teacher]

// Return
return ???
}

// This is the toArray extension.
// You may need it to use the snippet above
extension Results {
func toArray<T>(ofType: T.Type) -> [T] {
var array = [T]()
for var i = 0; i < count; i++ {
if let result = self[i] as? T {
array.append(result)
}
}
return array
}
}

所以问题是我不知道如何过滤数据库。

有人能帮助我吗?

最佳答案

要过滤与特定值有关系的对象,或者在您的情况下过滤具有特定名称主题的教师,您可以使用此谓词进行不区分大小写的搜索:

NSPredicate(format: "ANY subjects.name ==[c] %@", subjectName)

并将其插入过滤器功能中。由于您只想返回教师姓名,因此您无需按照建议创建任何扩展名,而是使用 native swift map方法:
func getAllTeacherNamesForSubject(subjectName: String) -> [String] {
let realm = openRealmDatabase
let predicate = NSPredicate(format: "ANY subjects.name ==[c] %@", subjectName)

return realm.objects(Teacher).filter(predicate).map { $0.name }
}

作为引用,您可以找到一个很棒的 cheatsheet on Realm's website描述支持的谓词语法的完整列表。

关于swift2 - Swift 2 中带有谓词的 Realm 搜索数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065711/

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