2015-04-06 3 views
0

Я использую SwiftyJSON для обработки JSON в приложении iOS, написанном в Swift.Хранение части SwiftyJSON

Я хочу сохранить часть объекта JSON в массиве, чтобы заполнить UITableView.

JSON является:

{"error":"","results":[{"id":1,"name":"test","nickname":"T"},{"id":1,"name":"Lorem","nickname":"L"}]} 

Поэтому в основном мне нужно хранить «результаты» в словаре или массив некоторого описания, так что я могу получить данные при заполнении таблицы.

Возможно, я не могу этого достичь. Я не могу понять, какой формат SwiftyJSON задает для подчиненных объектов.

EDIT: для иллюстрации этой проблемы я добавил уменьшенную версию кода. Я намеренно не задал тип в searchResults и не обрабатывал json ["results"] как что-либо, поскольку я не уверен в наилучшем типе.

import UIKit 
import SwiftHTTP 
import SwiftyJSON 

class SearchTableViewController: UITableViewController { 


    var searchResults 

    func loadSearchResults(){ 
     var request = HTTPTask() 
     let params: Dictionary<String,AnyObject> = [ 
      "request": "search" 
     ] 

     request.responseSerializer = JSONResponseSerializer() 
     request.GET("....", parameters: params, success: {(response: HTTPResponse) in 
      NSOperationQueue.mainQueue().addOperationWithBlock { 

       searchResults = json["results"] 

      } 
      },failure: {(error: NSError, response: HTTPResponse?) in 
       NSOperationQueue.mainQueue().addOperationWithBlock { 
        println("Error.") 
       } 
     }) 
    } 

} 
+0

Мог ли я, возможно, разместить часть вашего кода или просто фрагмент примера? – Jan

+0

Я обновил сообщение, надеюсь, что это поможет! – jdawg

ответ

0

Во всех моих приложениях, использующих SwiftyJSON я пытаюсь сделать следующее:

if let title = searchResult[index]["show"]["name"].stringValue { 
    newShow.name = title 
} 

Всякий раз, когда вы храните часть вашего ответа JSON всегда стараюсь, чтобы получить его, как правильное значение. Я могу только препятствовать хранению полного блоха сына в переменной, поскольку это сделает работу и синтаксический анализ более сложной.

0

Мне кажется, что вы можете получить доступ к SwiftyJSON с вычисленными свойствами, предоставляемыми расширением Array самого SwiftyJSON.

У вас может быть доступ, например, к необязательному [JSON], необязательному [JSON] или [AnyObject], используя соответственно массив, arrayValue или arrayObject типа JSON.

В одном из моего проекта я объявляю массив сообщений в моем TableView Controller:

var postsArray : [Post]? 

«Post» быть моделью объекта моей собственной. Позже я просто заполняю этот массив, используя одно из тех свойств, которые перечислены выше.

self.postsArray = persistInMem(jsonPosts.arrayValue) 

Обратите внимание, что jsonPosts - это объект JSON, который удален удаленно с помощью SwiftyJSON. PersistInMem - это просто функция, которая отображает мой массив «JSON» в массив объектов «Post». Единственное предостережение здесь в том, что я уверен, что jsonPosts типа JSON действительно является массивом под другим (что означает, когда я не уверен), я должен был использовать свойство «array» для SwiftyJson, которое вычисляет необязательный массив.

Надеюсь, это поможет.