加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – Alamofire,Objectmapper,Realm:嵌套对象

发布时间:2020-12-14 04:47:51 所属栏目:百科 来源:网络整理
导读:我正在使用Alamofire,Objectmapper,Realm,一切都在一件事:我无法映射嵌套对象. class Voting: Object,Mappable { dynamic var votingID: String = "" dynamic var question: String = "" var votingOptions = ListVotingOption() required convenience init
我正在使用Alamofire,Objectmapper,Realm,一切都在一件事:我无法映射嵌套对象.

class Voting: Object,Mappable {

    dynamic var votingID: String = ""
    dynamic var question: String = ""
    var votingOptions = List<VotingOption>()

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        votingID <- map["id"]
        question <- map["question"]
        votingOptions <- map["votingOptions"]
    }

    override class func primaryKey() -> String {
        return "votingID"
    }   
}

class VotingOption: Object,Mappable{

    dynamic var optionID: String = ""
    dynamic var text: String = ""


    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        optionID <- map["id"]
        text <- map["optionText"]
    }

    override class func primaryKey() -> String {
        return "optionID"
    }   
}

我想要映射的JSON是:

{
    "Voting": [
        {
            "question": "Which option do yo prefer?","id": "7f073efd-6f3d-43f2-9fe4-5cad683b77a2","votingOptions": [
                {
                    "optionText": "Option 3","id": "3bc0a618-8791-4862-a7fd-5f2df464697d"
                },{
                    "optionText": "Option 1","id": "84c6a830-814b-40c8-a252-c074be5d689a"
                },{
                    "optionText": "Option 2","id": "8872ef6f-fc70-445a-802e-d39944006467"
                }
            ]
        }
    ]
}

VotingOption中的映射功能永远不会被调用.

解决方法

旧的ListTransform解决方案不再适用于Swift 3.

这就是我现在正在使用的;例如,将它放在名为ListExtensions.swift的文件中.

import Foundation
import ObjectMapper
import RealmSwift

/// Maps object of Realm's List type
func <- <T: Mappable>(left: List<T>,right: Map)
{
    var array: [T]?

    if right.mappingType == .toJSON {
        array = Array(left)
    }

    array <- right

    if right.mappingType == .fromJSON {
        if let theArray = array {
            left.append(objectsIn: theArray)
        }
    }
}

这允许您像这样简单地使用它:

class Parent: Object,Mappable {
    dynamic var id: Int = 0
    var children = List<Child>()

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        id <- map["id"]
        children <- map["children"]
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读