swift2 – 在Swift 2中使用谓词搜索数据库
发布时间:2020-12-14 04:45:48 所属栏目:百科 来源:网络整理
导读:我在 Swift2中编写了一个(Mac)应用程序,它应该搜索具有特定主题的教师的Realm数据库.领域中教师对象的定义如下所示: class Teacher: Object { var subjects = ListSubject()} 这个类非常复杂所以我删除了一些行… 这是应该过滤具有特定主题的教师数据库并仅
我在
Swift2中编写了一个(Mac)应用程序,它应该搜索具有特定主题的教师的Realm数据库.领域中教师对象的定义如下所示:
class Teacher: Object { var subjects = List<Subject>() } 这个类非常复杂所以我删除了一些行… 这是应该过滤具有特定主题的教师数据库并仅返回教师姓名的函数(如String Array:[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) 并将其插入过滤功能.由于您只想返回教师姓名,因此您不需要按照建议创建任何扩展名,而是使用本机swift映射方法: 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,它描述了支持的谓词语法的完整列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |