Swift 3 - 将模拟的JSON声明为来自服务器的响应

时间:2017-06-28 16:26:21

标签: json swift dictionary mapping dao

我正在使用swift 3.0制作应用程序。但我有一个问题,因为在API REST仍然没有实现该服务,我正在创建一个模拟JSON继续工作。但是你将在图像中的所有解释结束时看到的问题是我不知道如何声明JSON“-.- ....基本上程序将调用服务器并且它将响应使用JSON(现在我将其传递给“模拟”,您将在代码中看到它。)并且使用JSON将它与ObjectMapper映射到某些模型(我传递代码),以便最终应用程序有一个对象。

Error declaring Simulated JSON

这是我必须在服务器或本例中模拟JSON时映射JSON的三个模型。

第一个是“LegendEntriesModel”:

component.pieChartData.push(component.greenFlagsTotal);

第二个是“DeliverablesModel”

let temp = [...component.pieChartData, ...component.greenFlagsTotal];
component.pieChartData = [...temp];

最后一个是“OptionsDeliverablesModel”:

import Foundation
import ObjectMapper
import AlamofireDomain

class LegendEntriesModel: Mappable {


fileprivate var _id_snapshot:     String?
fileprivate var _date:            String?
fileprivate var _deliverables:    [DeliverablesModel]?



init(){}

required init?(map: Map) { }

func mapping(map: Map) {
    self.id_snapshot      <- map["id_snapshot"]
    self.date             <- map["date"]
    self.deliverables     <- map["deliverables"]
}

var id_snapshot: String {
    get {
        if _id_snapshot == "" {
            _id_snapshot = ""
        }
        return _id_snapshot!
    }
    set {
        _id_snapshot = newValue
    }
}


var date: String {
    get {
        if _date == "" {
            _date = ""
        }
        return _date!
    }
    set {
        _date = newValue
    }
}


var deliverables: [DeliverablesModel] {
    get {
        if _deliverables == nil {
            _deliverables = []
        }
        return _deliverables!
    }
    set {
        _deliverables = newValue
    }
}



//MARK: RELEASE MEMORY BETWEEN OBJECT AND API REST (BROKE DEPENDENCIS)
func copy()->LegendEntriesModel {

    let legendEntriesModel  = LegendEntriesModel()

    legendEntriesModel.id_snapshot   = self.id_snapshot
    legendEntriesModel.date          = self.date
    legendEntriesModel.deliverables  = copyDeliverables()

    return legendEntriesModel
}

func copyDeliverables() -> [DeliverablesModel]{
    var newArray: [DeliverablesModel] = []
    for item in deliverables {
        newArray.append(item.copy())
    }
    return newArray
}
}

使用这三个“模型”是我可以在类DAO中映射JSON,但这是问题,因为我不知道如何传递我模拟的JSON。

代码如下:

import Foundation
import ObjectMapper
import AlamofireDomain

class DeliverablesModel: Mappable {


fileprivate var _id:              String?
fileprivate var _type:            String?
fileprivate var _url_layer:       String?
fileprivate var _options:         OptionsDeliverablesModel?



init(){}

required init?(map: Map) { }

func mapping(map: Map) {
    self.id               <- map["id"]
    self.type             <- map["type"]
    self.url_layer        <- map["url_layer"]
    self.options          <- map["options"]
}

var id: String {
    get {
        if _id == "" {
            _id = ""
        }
        return _id!
    }
    set {
        _id = newValue
    }
}


var type: String {
    get {
        if _type == "" {
            _type = ""
        }
        return _type!
    }
    set {
        _type = newValue
    }
}


var url_layer: String {
    get {
        if _url_layer == "" {
            _url_layer = ""
        }
        return _url_layer!
    }
    set {
        _url_layer = newValue
    }
}

var options: OptionsDeliverablesModel {
    get {
        if _options == nil {
            _options = OptionsDeliverablesModel()
        }
        return _options!
    }
    set {
        _options = newValue
    }
}

//MARK: RELEASE MEMORY BETWEEN OBJECT AND API REST (BROKE DEPENDENCIS)
func copy()->DeliverablesModel {

    let deliverablesModel  = DeliverablesModel()

    deliverablesModel.id         = self.id
    deliverablesModel.type       = self.type
    deliverablesModel.url_layer  = self.url_layer
    deliverablesModel.options    = self.options

    return deliverablesModel
}
}

正如您在图像中看到的那样,我声明我的模拟JSON错误,然后将其与“LegendDeliveriesModel”映射到一个对象。我该怎么办?

Error declaring simulated JSON

如果您还有其他需要,请告诉我。我再说一遍,问题出在JSON模拟语句中,我不知道如何将它传递给DAO并将其映射。

2 个答案:

答案 0 :(得分:1)

您不确定是否会对此开放,但最好尝试在文件中创建JSON并使用Bundle加载它,如下所示:

import argparse

thing1 = ''
thing2 = ''
thing3 = ''`

parser = argparse.ArgumentParser(description='Generic Argument Framework')
parser.add_argument('-v1', '--variable1', help='input for variable 1',required=True,)
parser.add_argument('-v2', '--variable2', help='input for variable 2',required=True,)
parser.add_argument('-v3', '--variable3', help='input for variable 3',required=True,)

args = parser.parse_args()

print 'variable1: ' + args.variable1
print 'variable2: ' + args.variable2
print 'variable3: ' + args.variable3

args.variable1 = thing1
args.variable2 = thing2
args.variable3 = thing3



print thing1
print thing2
print thing3






—————————————————————————————
Output from terminal is:

python argument.py -v1 skittles -v2 kitkat -v3 snickers
variable1: skittles
variable2: kitkat
variable3: snickers



—————————————————————————————

答案 1 :(得分:0)

我认为你的语法对于声明你的JSON是错误的。非常肯定在快速声明字典内联你只使用[&#34;键&#34;:&#34;值&#34;]

所以只需删除所有{和}

编辑:对不起,没有意识到它不在方法之内。如果你想这样做,你必须直接声明它

    var deliverables = ["legendEntries": ["id_snapshot": "123","date": "2016-10-20","deliveries": ["id": "12","type": "RGB","url_layer":"topp:states","options": ["type": "range","max_range": 100,"min_range": 0,"title": "Option RGB","initial_max_value": 100,"initial_min_value": 0,"id": "depth"]]]]

如果您只是将它用作模拟数据,我还会考虑将其设为常量而不是变量