简体   繁体   中英

How to save struct to Realm, with list of another struct

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 :-)

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..

First look: 在此处输入图片说明

Here is an example project of how to implement the abstraction layer for the persistency:

link to github

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
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM