Ich versuche mit JSON als MVC-Modell zu arbeiten, dazu habe ich Folgendes getan:
// Country.swift
import SwiftyJSON
class Country {
var code: String!
var dialCode: Int!
var name: String!
init(json: JSON) {
for i in 0...json["countries"].count - 1 {
if let code = json["countries"][i]["code2"].string, dialCode = json["countries"][i]["dialCode"].string, name = json["countries"][i]["name"].string {
self.code = code
self.dialCode = Int(dialCode)
self.name = name
}
}
}
}
und später in meinem ViewController mache ich:
var countries = [Country]()
Alamofire.request(.POST, "(property.host)(property.getCountryList)", parameters: parameters, encoding: .JSON).responseJSON { response in
do {
let json = JSON(data: response.data!)
countries.append(Country(json: json))
} catch _ {
}
}
aber ich habe ein Problem. Wenn ich Werte in der Datei Country.swift drucke, erhalte ich Ergebnisse, aber wenn ich print(countries)
es bringt mich zurück [Project.Country]
und count gibt zurück 1. Was ist das Problem? Was ich falsch mache?
Antworten:
1 für die Antwort № 1Wenn ich nicht falsch verstanden habe, ist dies nicht Ihr gewünschtes Verhalten?
countries
ist eine Reihe von Project.Country
, welcher Swift durch Drucken darstellt [Project.Country]
(ein Array, das eine Instanz Ihrer Klasse enthält). Es gibt kein Problem. Wenn Sie nachweisen möchten, dass das Array a enthält Project.Country
Sie sollten eine der Eigenschaften der Klasse "drucken": print(countries.first.name)
EDIT: Problem ist, Sie übergeben ein JSON
Array von Ländern zu einer einzigen init-Methode, die lediglich die Eigenschaften für jedes Land festlegt und nicht für jedes eine Instanz erstellt. Daher haben Sie nur eine Instanz zurück
0 für die Antwort № 2
Ihr Problem ist, dass Sie ein Länderfeld an die init-Methode übergeben, die nur dann aufgerufen wird, wenn Sie es wie hier tun müssen
class Country {
var code: String!
var dialCode: Int!
var name: String!
init(json: JSON) {
if let code = json["code2"].string, dialCode = json["dialCode"].string, name = json["name"].string {
self.code = code
self.dialCode = Int(dialCode)
self.name = name
}
}
}
Und hier eine Schleife
Alamofire.request(.POST, "", parameters: nil, encoding: .JSON).responseJSON { response in
if let jsonResponse = response.result.value{
let json = JSON(jsonResponse)
for countriesJSON in json["countries"].arrayValue{
self.countries.append(Country(json: countriesJSON))
}
print(self.countries.count)
}
}