La forma correcta de crear una referencia a un objeto en Realm.
Creé una aplicación de fitness y utilizo Realm como base de datos local. Durante el primer lanzamiento, quiero reemplazar el Realm predeterminado con un archivo de Realm que contenga datos iniciales (nombres de ejercicios, equipos, músculos involucrados, etc.). Estos datos iniciales no cambiarán en el futuro. Me pregunto si existe alguna forma que pueda ayudarme a crear una referencia en la clase principal a otras clases más pequeñas. Necesito esto para facilitar la filtración y obtención de datos.
Esta es mi clase de Realm principal:
class Exercise: Object {
@Persisted var exerciseID: Int = 0
@Persisted var name: String = ""
@Persisted var category: Int
@Persisted var equipment: String
@Persisted var instruction: String
@Persisted var muscle: String
@Persisted var gif: String?
@Persisted var image: String? = nil
convenience init(name: String, category: Int, equipment: String, instruction: String, muscle: String, gif: String?, image: String?) {
self.init()
self.name = name
self.category = category
self.equipment = equipment
self.instruction = instruction
self.muscle = muscle
self.gif = gif
self.image = image
}
override static func primaryKey() -> String? {
return "exerciseID"
}
}
Cuando quiero obtener todos los ejercicios y los equipos y músculos asignados, es realmente mucho código para recuperar estos datos, especialmente cuando la cadena contiene algunas referencias a objetos.
var exercises = [Exercise]()
var equipments = [Equipment]()
func getAllExercises() {
let data = RealmService.shared.realm.objects(Exercise.self)
exercises = data.compactMap({$0})
let equipment = exercises.compactMap({$0.equipment})
for eq in exercises.compactMap({$0.equipment}) {
let numberOfEquipment = eq.components(separatedBy: ",")
for number in numberOfEquipment {
guard let intNumber = Int(number) else { return }
guard let finalEquipment = RealmService.shared.realm.object(ofType: Equipment.self, forPrimaryKey: intNumber) else { return }
equipments.append(finalEquipment)
}
}
¿Quizás la mejor opción sea simplemente insertar valores en lugar de referencias de objeto?
davy.ai
Uso de Realm en una aplicacion de Fitness
Como experto en IT especializado en iOS, Swift y Realm, estas construyendo una aplicacion de Fitness que utiliza Realm como base de datos local. Durante el primer lanzamiento, deseas reemplazar el Realm predeterminado con un archivo Realm que contenga los datos iniciales que no cambiaran en el futuro. Te preguntas si hay alguna manera de crear una referencia en la clase principal a otras clases mas pequeñas para facilitar el filtrado y obtencion de datos.
Creando una clase Realm
La clase
Ejercicio
es la clase principal en tu aplicacion de Realm. Puedes usar el metodoconvenience init
para definir los datos iniciales que se utilizaran durante el primer lanzamiento de la aplicacion:Recuperando datos de Ejercicio
Para recuperar todos los ejercicios y los equipos y musculos asignados, puede usar una combinacion de consultas
Realm
y ciclosfor
. Aqui hay un ejemplo:Este codigo recupera todos los ejercicios, equipos y musculos de la base de datos Realm e inserta las referencias en arreglos para facilitar el filtrado y la obtencion de datos. Tenga en cuenta que este enfoque requiere mas codigo, pero le permite usar referencias de objetos en lugar de simplemente insertar valores.
En general, aprovechar el poder de la base de datos local de Realm para su aplicacion de Fitness proporciona una solucion robusta y escalable para el almacenamiento, recuperacion y manipulacion de datos.