Evita Duplicados en SwiftData con el Macro Unique

Libranner Santos
19 marzo, 20252min de lectura
Cuando trabajamos con bases de datos, es imprescindible garantizar que los datos se mantengan en un estado coherente. Una herramienta clave para lograr esto son las restricciones de unicidad (conocidas como constraints en inglés), que permiten definir qué propiedades de un modelo deben ser únicas en cada registro.
En SwiftData, logramos implementar estas restricciones mediante el macro #Unique
. Este macro se utiliza para especificar qué combinaciones de propiedades en un modelo deben ser únicas.
Si quieres una introducción a Swift Data, te recomendamos este artículo.
Ejemplo práctico: Definir una propiedad única
Veamos un ejemplo básico en Swift:
@Modelclass Product {#Unique<Product>([\.name])var name: Stringvar barcode: Stringvar date: Date}
En este caso, estamos indicando que la propiedad name
es única dentro del modelo Product, utilizando un keypath
.
Comportamiento en caso de colisión
Si ocurre una colisión (es decir, si se intenta insertar un registro que no cumple con la restricción de unicidad), SwiftData realizará una operación de actualización en lugar de una inserción. Esto significa que, si intentamos agregar un producto con el mismo name
, los demás datos del registro existente se actualizarán en lugar de crearse un nuevo registro.
Definir restricciones compuestas
También es posible definir restricciones que incluyan varias propiedades, ya que el macro acepta un arreglo de keypaths. Por ejemplo, si queremos que la restricción considere tanto la propiedad name
como barcode
, el macro se definiría de la siguiente manera:
#Unique<Product>([\.name, \.barcode])
Conclusión
Utilizar el macro #Unique
en SwiftData facilita garantizar la integridad de los datos y evita duplicados no deseados en nuestras bases de datos. Esta funcionalidad es especialmente útil para mantener consistencia en modelos con múltiples propiedades que deben ser únicas.