2016-12-12 8 views
0

こんにちは、私は配列リストのサーバーから応答を得ることができます。しかし、私はどのようにオブジェクト配列[フィード]でその応答を解析し、完了ハンドラでそれを送信するかわかりません。次のように私のコードは次のように応答NSArrayをオブジェクト配列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)") 

     } 
    } 
} 

フィードのモデルは次のとおりです。

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; 
    } 
} 

私はフィードアレイとしてこれを解析すると、完了コールバックにそれを送りました。 私はAlamofire restライブラリを使用して、残りのサーバーからデータをロードしています。

+0

誰がどのようなデータセットのルックスを見ずに、あなたの質問に答えることはできません好き。 -1 –

+1

私は疑問に思っていますdownvotedここにデータセットを確認してください https://jsonplaceholder.typicode.com/posts O.o – sector11

答えて

0

あなたはこの試みることができる:あなたのFeedクラスを更新し、また

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

を:

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; 
    } 
} 

ちょうどあなたのJSONレスポンスで適切なキーであるものは何でも、 "タイトル" と "身体" に変更します。

エルトマトはフィードinitが動作していないことを指摘されように、これは運動場で試してみたことができるテストコードです:

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

あなたはフィードのインスタンスを作成するためにフィードを初期化していません。 –

+0

申し訳ありませんが、私はそれを取得しません。 Feedインスタンスはここで作成されます: 'let feed = Feed(json:json){feeds.append(feed)}' – JPetric

+0

Feedクラスのinitメソッドをよく見てください。 -1 –

関連する問題