2016-05-23 9 views
3

Ich erhalte ein JSON-Wörterbuch von einem Web-Service und ich muss die Rückgabewerte zu vorhandenen Werten zuordnen. Hier ist im Wesentlichen, was Ich versuche zu tun:Erstellen Sie ein Array von Objekt aus einem Array von Wörterbüchern mit Swift

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

Ich brauche die exportAppnStatusList und füllen Sie die zugehörigen Werte in der bestehenden contract1 und contract2, Zuordnung zu nehmen von der contractID

Antwort

3

Dieser füllt die Verträge mit den verfügbaren Informationen, ignoriert es Verträge, bei denen die ID nicht gefunden werden konnte:

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

Versuchen Sie, diese init (Ihr Klasse muss von NSObject) erben:

init(jsonDict: [String: String]) { 
     super.init() 

     for (key, value) in jsonDict { 
     if class_respondsToSelector(Contract.self, NSSelectorFromString(key)) { 
      setValue(value, forKey: key) 
     } 
    } 
    } 

Dann können Sie dies tun:

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

Die Sache nimmt, ist, ich habe ein vorhandenes Array von Verträgen würde Ich mag bis zur Schleife und füllen Sie die Werte für, gegen ein völlig neues Array erstellen . – sl0anage

0

Warum erzeugen, den Vertrag nicht Gegenstand durch Zuordnung über das Array von Wörterbüchern wie diesem? Sie müssen eine benutzerdefinierte initializer schreiben, die alle diese params

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"] 
} 
+0

Ich habe ein bestehendes Array von Vertragsobjekten, die diese Eigenschaften benötigen, die durch den JSON-Aufruf überschrieben werden. – sl0anage

Verwandte Themen