Reputation: 63
i created data persistent layer in struct according to this guide, but i also need to create some realm object with struct and add it to another Realm object in struct, like array. I mean something like that:
public struct Publisher {
public let identifier: Int
public let name: String
}
public struct Character {
public let identifier: Int
public let name: String
public let realName: String
var publisherArray: [Publisher]
}
final class PublisherObject: Object {
dynamic var identifier = 0
dynamic var name = ""
override static func primaryKey() -> String? {
return "identifier"
}
}
final class CharacterObject: Object {
dynamic var identifier = 0
dynamic var name = ""
dynamic var realName = ""
var publisherArray: List<PublisherObject>?
override static func primaryKey() -> String? {
return "identifier"
}
}
In above guide, author added to struct only one another struct, not array. I got to this point:
extension Character: Persistable {
public init(managedObject: CharacterObject) {
identifier = managedObject.identifier
name = managedObject.name
realName = managedObject.realName
publisherArray = managedObject.publisherArray
.compactMap(Publisher.init(managedObject:))
}
}
but i don't know, what i must type here:
public func managedObject() -> CharacterObject {
let character = CharacterObject()
character.identifier = identifier
character.name = name
character.realName = realName
// here must be something like that, but for array
// character.publisherArray = publisherArray.managedObject()
return character
}
Thanks all of you for help :-)
Upvotes: 0
Views: 1149
Reputation: 11039
Instead of making duplicate classes for your every struct, just use Unrealm which will take care everything for you. Just make your structs/enums conform from Realmable
protocol. You can save not only an array of Structs but also dictionaries, optional types, atc..
Here is an example project of how to implement the abstraction layer for the persistency:
Upvotes: 1
Reputation: 63
I finally solved my problem :-)
public func managedObject() -> CharacterObject {
let character = CharacterObject()
character.identifier = identifier
character.name = name
character.realName = realName
publisherArray.forEach({ publisher in
character.publisherArray.append(publisher.managedObject())
})
return character
}
Upvotes: 0