Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Swift从字典数组创建对象数组_Ios_Json_Swift - Fatal编程技术网

Ios 使用Swift从字典数组创建对象数组

Ios 使用Swift从字典数组创建对象数组,ios,json,swift,Ios,Json,Swift,我从一个web服务接收到一个JSON字典,我需要将返回值映射到现有值。下面是我想做的: class Contract { var contractID: String? var ebState: String? var ibState: String? var importerState: String? var exportersBankRefNo: String? var importersBankRefNo: String? } let contract1 = Contract()

我从一个web服务接收到一个JSON字典,我需要将返回值映射到现有值。下面是我想做的:

class Contract {
var contractID: String?

var ebState: String?
var ibState: String?
var importerState: String?

var exportersBankRefNo: String?
var importersBankRefNo: String?
}

let contract1 = Contract()
contract1.contractID = "001"

let contract2 = Contract()
contract2.contractID = "002"

// This is the JSON return dictionary
let exportAppnStatusList: [[String: String]] = [["contractID":"001",
    "ExporterBankRefNo":"ExporterBankRefNo001",
    "ExporterBankState":"ACCEPTED",
    "ImporterBankRefNo":"",
    "ImporterBankState":"UNKNOWN",
    "ImporterState":"UNKNOWN" ],
  ["contractID":"002",
    "ExporterBankRefNo":"ExporterBankRefNo002",
    "ExporterBankState":"ACCEPTED",
    "ImporterBankRefNo":"ImporterBankRefNo002",
    "ImporterBankState":"ACCEPTED",
    "ImporterState":"UNKNOWN" ]]
我需要获取
exportAppnStatusList
并在现有的
contract1
contract2
中填写相关值,通过
Contractd
映射,尝试使用此init(您的类必须从NSObject继承):

然后你可以这样做:

exportAppnStatusList.forEach {
    print(Contract(jsonDict: $0))
}

这将使用可用信息填充合同,忽略找不到id的合同:

for contract in [contract1, contract2] {
    if let contractDict = exportAppnStatusList.filter({$0["contractID"] == contract.contractID}).first {
        contract.exportersBankRefNo = contractDict["ExporterBankRefNo"]
        contract.ebState = contractDict["ExporterBankState"]
        contract.importersBankRefNo = contractDict["ImporterBankRefNo"]
        contract.ibState = contractDict["ImporterBankState"]
        contract.importerState = contractDict["ImporterState"]
    }
}

为什么不通过像这样映射字典数组来生成契约对象呢?您需要编写一个接受所有这些参数的自定义初始值设定项

exportAppnStatusList.map { (dict:[Stirng:String]) -> Contract in 
    return Contract(contractID:dict["contractID"],
                    ebState:dict["ExporterBankState"],
                    ibState:dict["ImporterBankState"],      
                    importerState:dict["ImporterState"], 
                    exportersBankRefNo:dict["ExporterBankRefNo"], 
                    importersBankRefNo:dict["ImporterBankRefNo"] 
}

我有一个现有的契约对象数组,需要JSON调用覆盖这些属性。问题是,我有一个现有的契约数组,我想循环并填充其值,而不是创建一个全新的数组。
exportAppnStatusList.map { (dict:[Stirng:String]) -> Contract in 
    return Contract(contractID:dict["contractID"],
                    ebState:dict["ExporterBankState"],
                    ibState:dict["ImporterBankState"],      
                    importerState:dict["ImporterState"], 
                    exportersBankRefNo:dict["ExporterBankRefNo"], 
                    importersBankRefNo:dict["ImporterBankRefNo"] 
}