Real-time Search Database Using Predicate in Swift 2

I am writing a (Mac) application in Swift2 that is supposed to search for a Realm database from Teachers with a separate subject. The definition for the Teacher object in the field is as follows:

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

This class is very complex, so I deleted a few lines ...

Here, the function should filter the database for teachers with specific topics and return only the names of teachers (as 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
    }
}

So the problem is that I do not know how to filter the database.

Can anybody help me?

+4
source share
1 answer

, , , , :

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

. , - , , 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 - Realm, .

+7

Source: https://habr.com/ru/post/1611174/


All Articles