Ios Swift 2.0:使用JSON与REST API通信的最佳实践
我开始迁移到Swift,刚刚意识到大多数示例代码在Swift 2.0中不再有效,作为初学者很难入门 那么,使用标准libs中的Swift方法与swift2.0中的restapi通信的最佳实践是什么呢 有人能为以下场景提供Swift 2.0代码吗Ios Swift 2.0:使用JSON与REST API通信的最佳实践,ios,json,swift,rest,nsurl,Ios,Json,Swift,Rest,Nsurl,我开始迁移到Swift,刚刚意识到大多数示例代码在Swift 2.0中不再有效,作为初学者很难入门 那么,使用标准libs中的Swift方法与swift2.0中的restapi通信的最佳实践是什么呢 有人能为以下场景提供Swift 2.0代码吗 从服务获取JSON数据 解析JSON(因此它在Swift中可用) 使用JSON编码的数据发送POST请求 请提供一个没有框架的解决方案。希望它能帮助所有其他试图从Web获取教程的人使用Swift 2.0。我也是一名初学者,我不能说我所做的是最佳实践,但下
请提供一个没有框架的解决方案。希望它能帮助所有其他试图从Web获取教程的人使用Swift 2.0。我也是一名初学者,我不能说我所做的是最佳实践,但下面是我如何使用NSURLSession和closures处理get请求的 首先,我定义了一个NetworkOperation类,它将处理NSURLSession。它具有以下属性:
lazy var config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
lazy var session: NSURLSession = NSURLSession(configuration: self.config)
let queryURL: NSURL
在初始值设定项中,我设置了queryURL。配置变量和会话变量是惰性的,因为我希望它们仅在使用网络操作时初始化
然后,我有了一个执行GET请求并检索JSON的方法。此方法接受闭包作为参数。此闭包将由调用方提供,并允许我将dataTask响应捕获到调用上下文中
func downloadJSONFromURl(completion: ([String:AnyObject]?) -> ()) {
let request = NSURLRequest(URL: queryURL)
let dataTask = session.dataTaskWithRequest(request) {
(let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
// 1: Check HTTP Response for successful GET request
guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
else {
print("error: not a valid http response")
return
}
switch (httpResponse.statusCode) {
case 200:
// 2: Create JSON object with data
do {
let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.AllowFragments)
as? [String:AnyObject]
// 3: Pass the json back to the completion handler
completion(jsonDictionary)
} catch {
print("error parsing json data")
}
default:
print("GET request got response \(httpResponse.statusCode)")
}
}
dataTask.resume()
}
这个示例非常简单,不处理错误,但您可以看到我如何将JSON解析为一个[String:AnyObject]
的try-catch块
之后,我将字典发回名为completion
的闭包,该闭包将对JSON执行必要的验证,然后将其转换为Swift对象
在这个闭包中,我使用可选绑定来安全地构建我的对象。
例如,假设我正在检索一本书,JSON如下所示:
{书名:“某本书”,作者:“J.Doe”}
因为我喜欢闭包,所以我将转换后的JSON发送到另一个闭包中,并提供给服务。你可以在我的电脑上看到完整的例子。这是一本树屋教程
我希望这能有所帮助。我建议您尝试真诚地将您找到的Swift 1.2示例之一转换为Swift 2.0。转换真的不是很难。如果您对Swift 2.0语法有疑问,请参阅WWDC 2015视频。在回答你的问题时,我建议你考虑一下,这简化了请求的准备和响应的解析。@ Rob,根据StAdvExcel上的所有评论,我决定作为一个快速的2 bp的特定——因为JSON解析了一些函数参数,正如所说的,初学者很难得到。2015年WWDC视频对第2步没有实际帮助。
if let title = json["author"] as? String, author = json["author"] as? String {
let book = Book(title: title, author: author)
serviceCompletion(book)
}