对NSURLSession的此扩展为您提供了来自HTTP请求的类型化响应,包括异步和同步。如果出现错误,则抛出异常。
支持以下类型化的响应
String
[String:AnyObject]
NSData
UIImage
或 NSImage
NSXMLParser
获取一个NSURLSession
let session = NSURLSession.sharedSession()
为要加载的数据创建一个NSURLRequest实例
let request = NSURLRequest(URL: NSURL(string: "http://loripsum.net/api/plaintext")!)
调用NSURLSession以获取您感兴趣的类型,例如 "text"。
let task = session.textTaskWithRequest(request) { (text:String?, response:NSHTTPURLResponse?, error:NSError?) in
// Do something interesting with text
NSLog("\(text)")
}
task.resume()
let text = try session.awaitTextWithRequest(textRequest)
do {
let request = NSURLRequest(URL: NSURL(string: "http://date.jsontest.com/")!)
let json = try session.awaitJsonWithRequest(request)
let date = json["date"]
NSLog("\(date)")
}
catch let error as NSError {
NSLog("\(error.localizedDescription)")
}
do {
var request = NSMutableURLRequest(URL: NSURL(string: "https://mega.lotto/api")!)
request.HTTPMethod = "POST"
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject([4,8,15,16,23,42], options: [])
try session.awaitVoidWithRequest(request)
print("OK")
}
catch let error as NSError {
NSLog("\(error.localizedDescription)")
}
@objc
class WxParserDelegate : NSObject, NSXMLParserDelegate {
private var _elements:[String] = []
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
_elements.append(elementName)
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
_elements.removeLast()
}
func parser(parser: NSXMLParser, foundCharacters string: String) {
let path = _elements.joinWithSeparator("/")
if (path == "dwml/data/moreWeatherInformation") {
NSLog("\(string)")
}
}
}
do {
var request = NSMutableURLRequest(URL: NSURL(string: "http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?whichClient=NDFDgen&lat=38.99&lon=-77.01")!)
var parser = try session.awaitXmlWithRequest(request)
let delegate = WxParserDelegate()
xmlParser.delegate = delegate
xmlParser.parse()
}
catch let error as NSError {
NSLog("\(error.localizedDescription)")
}
感谢Basem Emara,其博客让我开始: 通过Carthage和CocoaPods创建iOS、watchOS和tvOS的多平台Swift框架