/ / Warum gibt Array nach dem Anhängen von Elementen null zurück? - ios, json, swift, model-view-controller, swifty-json

Warum gibt Array nach dem Anhängen an Elemente nil zurück? - iOS, JSON, Swift, Model-View-Controller, SWIFTY-JSON

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 № 1

Wenn 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)
}
}