如何使用 Swift 2 + XCode 7 + iOS 9 获取和解析 JSON
How To Fetch and Parse JSON Using Swift 2 + XCode 7 + iOS 9
想找Swift2和iOS9联网有用的教程,网上好像没有相关内容。我看过 WWDC session Networking with NSURLSession 但我无法调整 iOS9 的新 API 以异步方式获取和解析 JSON 数据.我尝试过的:
do {
if let url = NSURL(string: "site/api.php?option=fetchOps"),
let data = NSData(contentsOfURL: url),
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [[String:AnyObject]] {
}
} catch let error as NSError {
print(error.description)
}
请在 iOS9 和 Swift2 上分享您的网络经验,任何最佳实践可能是 Singleton class 网络和解析可能是 ORM?
为您提出请求的简单方法:
或者如果您想自己发送请求:
将字符串转换为 JSON 对象:
举个例子,这里我转换了一个NSString
首先将 NSString 转换为 NSDictionary
static func convert(src: NSString) -> NSDictionary {
// convert String to NSData
let data = src.dataUsingEncoding(NSUTF8StringEncoding)
var error: NSError?
// convert NSData to 'AnyObject'
let anyObj: AnyObject?
do {
anyObj = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0))
} catch let error1 as NSError {
error = error1
anyObj = nil
}
if(error != nil) {
// If there is an error parsing JSON, print it to the console
print("JSON Error \(error!.localizedDescription)")
//self.showError()
return NSDictionary()
} else {
return anyObj as! NSDictionary
}
}
然后,像这样使用它
if let name = dictionary["name"] as? String {
self.name = name
}
你可以使用转换后的JSON来制作这样的对象
import Foundation
class Student {
var name="";
init(dictionary: NSDictionary) {
let _NAME = "name"
if let name = dictionary[_NAME] as? String {
self.name = name
}
}
}
oha,嗯...搜索 swift 的异步网络调用。你会发现很多东西。
但是是的...创建一个 NSMutableRequest,初始化 URL,将方法设置为 GET 或 POST。
现在制作:
let task = NSURLSession.sharedSession().dataTaskWithRequest(yourMutableRequest) {
data, response, error in
// do your stuff here
}
task.resume()
这将运行异步,因此您需要考虑一种处理数据的方法。首先,您的响应数据位于变量 data
中,这是一种 NSData。您将需要它来创建您的字典:
let dictionaryOrArray = NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers, error: nil)
也许你需要把它放在一个守卫中或者如果让声明。
现在您需要将数据传递给函数调用者...您可以通过多种方式做到这一点,我更喜欢成功和失败块
您调用 Request 函数并提供成功和失败块。这个块将完成最终应该发生的事情:
let successBlock:[AnyObject]->Void = { response in
// handle your dict
}
let failureBlock:NSError->Void = { error in
// error handling
}
YourClass.fetchSomething(someURL, parameters: params, requestMethod: method, success : successBlock, failure: failureBlock)
类似的东西。在包含数据、响应、错误的请求块中,您只需执行以下操作:
If error {
failure(error)
return
}
success(dictionaryOrArray)
想找Swift2和iOS9联网有用的教程,网上好像没有相关内容。我看过 WWDC session Networking with NSURLSession 但我无法调整 iOS9 的新 API 以异步方式获取和解析 JSON 数据.我尝试过的:
do {
if let url = NSURL(string: "site/api.php?option=fetchOps"),
let data = NSData(contentsOfURL: url),
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [[String:AnyObject]] {
}
} catch let error as NSError {
print(error.description)
}
请在 iOS9 和 Swift2 上分享您的网络经验,任何最佳实践可能是 Singleton class 网络和解析可能是 ORM?
为您提出请求的简单方法:
或者如果您想自己发送请求:
将字符串转换为 JSON 对象:
举个例子,这里我转换了一个NSString
首先将 NSString 转换为 NSDictionary
static func convert(src: NSString) -> NSDictionary {
// convert String to NSData
let data = src.dataUsingEncoding(NSUTF8StringEncoding)
var error: NSError?
// convert NSData to 'AnyObject'
let anyObj: AnyObject?
do {
anyObj = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0))
} catch let error1 as NSError {
error = error1
anyObj = nil
}
if(error != nil) {
// If there is an error parsing JSON, print it to the console
print("JSON Error \(error!.localizedDescription)")
//self.showError()
return NSDictionary()
} else {
return anyObj as! NSDictionary
}
}
然后,像这样使用它
if let name = dictionary["name"] as? String {
self.name = name
}
你可以使用转换后的JSON来制作这样的对象
import Foundation
class Student {
var name="";
init(dictionary: NSDictionary) {
let _NAME = "name"
if let name = dictionary[_NAME] as? String {
self.name = name
}
}
}
oha,嗯...搜索 swift 的异步网络调用。你会发现很多东西。
但是是的...创建一个 NSMutableRequest,初始化 URL,将方法设置为 GET 或 POST。
现在制作:
let task = NSURLSession.sharedSession().dataTaskWithRequest(yourMutableRequest) {
data, response, error in
// do your stuff here
}
task.resume()
这将运行异步,因此您需要考虑一种处理数据的方法。首先,您的响应数据位于变量 data
中,这是一种 NSData。您将需要它来创建您的字典:
let dictionaryOrArray = NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers, error: nil)
也许你需要把它放在一个守卫中或者如果让声明。
现在您需要将数据传递给函数调用者...您可以通过多种方式做到这一点,我更喜欢成功和失败块 您调用 Request 函数并提供成功和失败块。这个块将完成最终应该发生的事情:
let successBlock:[AnyObject]->Void = { response in
// handle your dict
}
let failureBlock:NSError->Void = { error in
// error handling
}
YourClass.fetchSomething(someURL, parameters: params, requestMethod: method, success : successBlock, failure: failureBlock)
类似的东西。在包含数据、响应、错误的请求块中,您只需执行以下操作:
If error {
failure(error)
return
}
success(dictionaryOrArray)