存储部分 SwiftyJSON
Storing part of SwiftyJSON
我在用 Swift.
编写的 iOS 应用程序中使用 SwiftyJSON 来处理 JSON
我想将 JSON 对象的一部分存储在数组中,以填充 UITableView。
JSON是:
{"error":"","results":[{"id":1,"name":"test","nickname":"T"},{"id":1,"name":"Lorem","nickname":"L"}]}
所以基本上我需要将 'results' 存储在字典或一些描述的数组中,以便在填充 table 时检索数据。
虽然我似乎无法做到这一点。我似乎无法锻炼 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.")
}
})
}
}
在我所有使用 Swifty 的应用程序中JSON 我尝试执行以下操作:
if let title = searchResult[index]["show"]["name"].stringValue {
newShow.name = title
}
每当您存储 JSON 响应的一部分时,请始终尝试将其作为正确的值。我只能劝阻将完整的子 blob 存储在变量中,因为这会使以后的工作和解析更加困难。
在我看来,您可以使用 SwiftyJSON 本身的数组扩展提供的计算属性访问 SwiftyJSON。
例如,您可以访问可选的 [JSON]、非可选的 [JSON] 或 [AnyObject],分别使用 [= 的数组、数组值或数组对象28=] 类型。
在我的一个项目中,我在我的 TableView 控制器中声明了一组帖子:
var postsArray : [Post]?
"Post" 是我自己的模型对象。后来我只是使用我上面列出的那些属性之一来填充这个数组。
self.postsArray = persistInMem(jsonPosts.arrayValue)
请注意,jsonPosts 是我使用 SwiftyJSON 远程获得的 JSON 对象。 persistInMem 只是一个将我的 "JSON" 数组映射到 "Post" 对象数组的函数。这里唯一需要注意的是,我确定 JSON 类型的 jsonPosts 确实是下面的一个数组,否则(意思是当不确定时)我应该使用 SwiftyJson 的 "array" 属性 来计算一个可选的数组。
希望对您有所帮助。
我在用 Swift.
编写的 iOS 应用程序中使用 SwiftyJSON 来处理 JSON我想将 JSON 对象的一部分存储在数组中,以填充 UITableView。
JSON是:
{"error":"","results":[{"id":1,"name":"test","nickname":"T"},{"id":1,"name":"Lorem","nickname":"L"}]}
所以基本上我需要将 'results' 存储在字典或一些描述的数组中,以便在填充 table 时检索数据。
虽然我似乎无法做到这一点。我似乎无法锻炼 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.")
}
})
}
}
在我所有使用 Swifty 的应用程序中JSON 我尝试执行以下操作:
if let title = searchResult[index]["show"]["name"].stringValue {
newShow.name = title
}
每当您存储 JSON 响应的一部分时,请始终尝试将其作为正确的值。我只能劝阻将完整的子 blob 存储在变量中,因为这会使以后的工作和解析更加困难。
在我看来,您可以使用 SwiftyJSON 本身的数组扩展提供的计算属性访问 SwiftyJSON。
例如,您可以访问可选的 [JSON]、非可选的 [JSON] 或 [AnyObject],分别使用 [= 的数组、数组值或数组对象28=] 类型。
在我的一个项目中,我在我的 TableView 控制器中声明了一组帖子:
var postsArray : [Post]?
"Post" 是我自己的模型对象。后来我只是使用我上面列出的那些属性之一来填充这个数组。
self.postsArray = persistInMem(jsonPosts.arrayValue)
请注意,jsonPosts 是我使用 SwiftyJSON 远程获得的 JSON 对象。 persistInMem 只是一个将我的 "JSON" 数组映射到 "Post" 对象数组的函数。这里唯一需要注意的是,我确定 JSON 类型的 jsonPosts 确实是下面的一个数组,否则(意思是当不确定时)我应该使用 SwiftyJson 的 "array" 属性 来计算一个可选的数组。
希望对您有所帮助。