【问题标题】:How to save struct to Realm, with list of another struct如何将结构保存到领域,以及另一个结构的列表
【发布时间】:2018-05-16 08:29:32
【问题描述】:

我根据this guide在struct中创建了数据持久层,但我还需要用struct创建一些领域对象,并将其添加到struct中的另一个领域对象中,比如数组。我的意思是这样的:

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"
    }
}

在上面的指南中,作者只添加了一个结构,而不是数组。 我到了这一点:

extension Character: Persistable {
    public init(managedObject: CharacterObject) {
        identifier = managedObject.identifier
        name = managedObject.name
        realName = managedObject.realName
        publisherArray = managedObject.publisherArray
            .compactMap(Publisher.init(managedObject:))
    }
}

但我不知道,我必须在这里输入什么:

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
        }

感谢大家的帮助:-)

【问题讨论】:

    标签: arrays swift struct realm


    【解决方案1】:

    不要为每个结构创建重复的类,只需使用Unrealm,它将为您处理好一切。只需让您的结构/枚举符合Realmable 协议即可。您不仅可以保存结构数组,还可以保存字典、可选类型、atc..

    第一眼:

    这是一个如何实现持久性抽象层的示例项目:

    link to github

    【讨论】:

    • 感谢您向我展示了这个不错的扩展,当我创建这篇文章时,这个 Unrealm 扩展并不存在。我下次可能会使用它:-)。
    【解决方案2】:

    我终于解决了我的问题:-)

    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
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多