0

我在用 Swift 编写的 iOS 应用程序中使用 SwiftyJSON 处理 JSON。

我想将部分 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.")
                }
        })
    }

}
4

2 回答 2

0

在我所有使用 SwiftyJSON 的应用程序中,我尝试执行以下操作:

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

每当您存储部分 JSON 响应时,请始终尝试将其作为正确的值。我只能阻止将完整的子 blob 存储在变量中,因为这会使以后的工作和解析更加困难。

于 2015-04-06T10:40:33.630 回答
0

在我看来,您可以使用 SwiftyJSON 本身的 Array 扩展提供的计算属性在 SwiftyJSON 下访问。

例如,您可以分别使用 JSON 类型的数组、arrayValue 或 arrayObject 访问可选的 [JSON]、非可选的 [JSON] 或 [AnyObject]。

在我的一个项目中,我在 TableView Controller 中声明了一系列帖子:

var postsArray : [Post]?

“发布”是我自己的模型对象。稍后,我只需使用上面列出的属性之一填充此数组。

self.postsArray = persistInMem(jsonPosts.arrayValue)

请注意,jsonPosts 是我使用 SwiftyJSON 远程获取的 JSON 对象。persistInMem 只是一个将我的“JSON”数组映射到“Post”对象数组的函数。这里唯一需要注意的是,我确定 JSON 类型的 jsonPosts 确实是一个数组,否则(意思是不确定时)我应该使用 SwiftyJson 的“数组”属性,它计算一个可选数组。

希望这可以帮助。

于 2015-04-06T10:55:22.590 回答