To store a Swift Struct in Core Data on iOS, you need to convert the struct to a class that can be represented in Objective-C. One way to do this is to create a separate class for your Stop
struct and use it in your Favourite
class. Here’s how you can do it:
First, create a class for your Stop
struct:
swiftimport Foundation
import CoreData
@objc(StopEntity)
class StopEntity: NSManagedObject {
@NSManaged var name: String
@NSManaged var id: String
}
Make sure to replace StopEntity
with the actual name you want to use for your Core Data entity representing the Stop
struct.
Then, update your Favourite
class to use StopEntity
:
swiftimport Foundation
import CoreData
class Favourite: NSManagedObject {
@NSManaged var origin: StopEntity
struct Stop {
var name: String
var id: String
init(name: String, id: String) {
self.name = name
self.id = id
}
}
func getStop() -> Stop {
return Stop(name: origin.name, id: origin.id)
}
func setStop(stop: Stop) {
origin.name = stop.name
origin.id = stop.id
}
}
In your Core Data model file (xcdatamodeld), you can set up Favourite
to have a one-to-one relationship with StopEntity
.
When you need to access the Stop
struct from Favourite
, you can use the getStop()
and setStop(stop:)
methods to convert between Stop
and StopEntity
.
المزيد من المعلومات
بالطبع! في هذا السيناريو، يتم استخدام Core Data لتخزين هيكل البيانات. يقدم Core Data واجهة لإدارة نموذج البيانات الخاص بتطبيقك، بما في ذلك القدرة على تخزين واستعادة البيانات بسهولة. ومن الجدير بالذكر أن Core Data يستخدم SQLite كمحرك تخزين للبيانات بشكل افتراضي.
عند تحديد هيكل البيانات في Core Data، يجب أن تكون جميع الخصائص التي ترغب في تخزينها قابلة للتمثيل في Objective-C. لذا، عندما تستخدم هيكلًا مثل الهيكل Stop
في Favourite
، يجب أن تقوم بتحويله إلى كائن من فئة NSManagedObject
قابلة للتمثيل في Objective-C، وهذا بالضبط ما قمت به بإنشاء فئة StopEntity
واستخدامها بدلاً من الهيكل Stop
.
باستخدام هذا النهج، يمكنك تخزين بيانات الـ Stop
كجزء من كائن Favourite
في Core Data، وتحويلها من وإلى كائنات NSManagedObject
المناسبة عند الحاجة.