Хранение части SwiftyJSON

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

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

JSON это:

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

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

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

РЕДАКТИРОВАТЬ: я добавил уменьшенную версию кода, чтобы проиллюстрировать эту проблему. Я намеренно не задавал тип для 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.")
                }
        })
    }

}

person jdawg    schedule 06.04.2015    source источник
comment
Не мог бы я опубликовать часть вашего кода или просто фрагмент примера?   -  person Jan    schedule 06.04.2015
comment
Я обновил пост, надеюсь, это поможет!   -  person jdawg    schedule 06.04.2015


Ответы (2)


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

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

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

person Jan    schedule 06.04.2015

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

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

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

var postsArray : [Post]?

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

self.postsArray = persistInMem(jsonPosts.arrayValue)

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

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

person Iman Zarrabian    schedule 06.04.2015