realmswift: манипулировать массивами с помощью объекта realm - PullRequest
0 голосов
/ 24 октября 2018

Я застрял с проблемой в разработке моего приложения.

У меня есть 2 объекта, машина и Conso.

Conso:

import Foundation
import RealmSwift

final class Car : Object {

    //@objc dynamic var ID = 0
    @objc dynamic var idCar = ""
    @objc dynamic var creadtedAt = NSDate()
    @objc dynamic var modifiedAt = NSDate()
    @objc dynamic var marque = ""
    @objc dynamic var modele = ""
    @objc dynamic var immatriculation = ""
    @objc dynamic var couleur = ""
    @objc dynamic var pseudo = ""
    @objc dynamic var kilometrage = ""
    @objc dynamic var commentaire = "j"
    @objc dynamic var reservoir = ""
    @objc dynamic var dateImmat = ""
    @objc dynamic var motorisation = ""
    @objc dynamic var dateAchat = Date()
    @objc dynamic var numeroSerie = ""
    @objc dynamic var pressionPneu = ""
    @objc dynamic var data: NSData?

}

и Car:

import Foundation
import RealmSwift

final class Conso : Object {

    //var id: Int
    @objc dynamic var idConso: String?
    @objc dynamic var dateConso = Date()
    @objc dynamic var createdAt = NSDate()
    @objc dynamic var carName: String?
    @objc dynamic var carKilometrage: String?
    @objc dynamic var carKmParcourus: String?
    @objc dynamic var nomStation: String?
    @objc dynamic var adresseStation: String?
    @objc dynamic var CPStation: String?
    @objc dynamic var villeStation: String?
    @objc dynamic var typeCarburant: String?
    @objc dynamic var conso: String?
    @objc dynamic var volConso: String?
    @objc dynamic var prix: String?
    @objc dynamic var coutLitre: String?
    @objc dynamic var commentaire: String?
    @objc dynamic var data: NSData?

}

Conso - это объект, который зависит от автомобиля, поэтому carName является частью объекта Conso.

Теперь я хочу отобразить для каждого автомобиля максимальное значение "Kilométrage"

Поэтому в моем tableView я поместил этот код:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "tdbCarCell", for: indexPath) as! tdbCarsTableViewCell
    print("tableView -> cellForRowAt")
    // Configure the cell...
    let modele = self.carObjects[indexPath.row].modele
    let pseudo = self.carObjects[indexPath.row].pseudo
    let km = self.carObjects[indexPath.row].kilometrage

    let consoData = realm.objects(Conso.self).filter("carName = '" + pseudo + "'")
    cell.labelCarPseudo?.text = pseudo
    cell.labelCarModele?.text = modele
    cell.labelkmParcourusDepuisAchat?.text = km

    return cell
}

Я получаю carName, которое является полем "Pseudo", и я делаю запрос к RealmObject, чтобы получить массив kilométrage для каждого автомобиля.

Я хочу получить максимальное значение «Километраж».Это поле определено как String, но оно является целым числом.

Не могли бы вы помочь мне получить максимальное значение "kilometrage", используя эти данные?

let consoData = realm.objects(Conso.self).filter("carName = '" + pseudo + "'")

Я не знаюКак восстановить данные в массивах.

Спасибо за помощь.

1 Ответ

0 голосов
/ 30 октября 2018

Что ж, если вы собираетесь выполнять Math со свойством (в основном по запросам), нет смысла хранить его как String.

Сначала измените ваше свойство на Integer:@objc dynamic var kilometrage = 0

Тогда Я не думаю, что вы можете извлечь - с помощью запроса - объект с максимальным значением произвольного свойства .

Имея это в виду, вам нужно извлечь всех ваших объектов , а затем отфильтровать , используя max(by:).

if let highestKmCar = realm.objects(Car.self).max(by: { $0.kilometrage > $1.kilometrage}) {
    print(highestConsoByKm.kilometrage)
    //Do what you have to do...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...