2016-12-12 2 views
0

Hallo ich bin in der Lage, Antwort vom Server für Array-Liste zu erhalten. Aber ich weiß nicht, wie man diese Antwort im Objektarray [Zufuhr] analysiert und sie auf Abschlussverarbeiter sendet. Mein Code ist wie folgt:Konvertieren Antwort NSArray in Objekt-Array swift3

class FeedsService { 

    private var feedsEndPoint: String = "https://jsonplaceholder.typicode.com/posts" 

    public func getFeeds(completion: ([Feed]) -> Void) { 
     Alamofire.request(feedsEndPoint, method: .get) 
      .validate(statusCode: 200..<300) 
      .validate(contentType: ["application/json"]) 
      .responseJSON{ response in 
       print("Response \(response.result.value)") 

     } 
    } 
} 

-Feed Modell ist wie folgt:

class Feed { 
    private var title: String 
    private var body: String 

    init(title:String, body: String) { 
     self.title = title 
     self.body = body 
    } 

    public func getTitle() -> String { 
     return self.title 
    } 

    public func getBody() -> String { 
     return self.body; 
    } 
} 

ich dies als Feed-Array analysieren möchten, und schickte es nach Abschluss Rückruf. Ich verwende Alamofire Rest-Bibliothek zum Laden von Daten vom Rest-Server.

+0

Niemand Ihre Frage beantworten kann, ohne zu sehen, was Ihre Daten-Set aussieht mögen. -1 –

+1

Ich frage mich, dass Sie downvotiert sind Bitte überprüfen Sie den Datensatz hier https://jsonplaceholder.typicode.com/posts O.o – sector11

Antwort

0

Sie können dies versuchen:

class FeedsService { 

    private var feedsEndPoint: String = "https://jsonplaceholder.typicode.com/posts" 

    public func getFeeds(completion: @escaping ([Feed]) -> Void) { 
     Alamofire.request(feedsEndPoint, method: .get) 
      .validate(statusCode: 200..<300) 
      .validate(contentType: ["application/json"]) 
      .responseJSON{ response in 
       print("Response \(response.result.value)") 
       var feeds = [Feed]() 
       if let jsonArray = response.result.value as? [[String: Any]] { 
        for json in jsonArray { 
         if let feed = Feed(json: json) { 
          feeds.append(feed) 
         } 
        } 
        completion(feeds) 
       } else { 
        // handle error 
       } 
     } 
    } 
} 

auch, aktualisieren Sie Ihren Feed-Klasse:

class Feed { 
    private var title: String 
    private var body: String 

    init(title:String, body: String) { 
     self.title = title 
     self.body = body 
    } 

    init?(json: [String: Any]) { 
     guard let title = json["title"] as? String, 
      let body = json["body"] as? String else { 
       return nil 
     } 
     self.title = title 
     self.body = body 
    } 

    public func getTitle() -> String { 
     return self.title 
    } 

    public func getBody() -> String { 
     return self.body; 
    } 
} 

Gerade ändern "Titel" und "Körper" zu, was auch immer ist die entsprechende Taste in Ihrer json Antwort.

Als El Tomato zeigt, dass Futtermittel init aus nicht funktioniert, das ist ein Test-Code, der auf einem Spielplatz ausprobiert werden können:

let testFeedJson = ["title": "Test Title", "body" : "Test Body"] 
if let testFeed = Feed(json: testFeedJson) { 
    print(testFeed.getTitle()) 
    print(testFeed.getBody()) 
} 
+0

Sie initialisieren Feed nicht, um eine Instanz von Feeds zu erstellen. –

+0

Sorry, ich verstehe es nicht. Die Feed-Instanz wird hier erstellt: 'if let feed = Feed (json: json) {feeds.append (feed)}' ' – JPetric

+0

Sehen Sie sich die init-Methode der Feed-Klasse gut an. -1 –