HandsomeURLSession 1.2.1

HandsomeURLSession 1.2.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新发布2017年3月

Andy Sherwood维护。



HandsomeURLSession v1.2.1

对NSURLSession的此扩展为您提供了来自HTTP请求的类型化响应,包括异步和同步。如果出现错误,则抛出异常。

支持以下类型化的响应

  • UTF8 文本:String
  • JSON:[String:AnyObject]
  • 数据:NSData
  • 图像:UIImageNSImage
  • XML:NSXMLParser

使用

  1. 获取一个NSURLSession

    let session = NSURLSession.sharedSession()
  2. 为要加载的数据创建一个NSURLRequest实例

    let request = NSURLRequest(URL: NSURL(string: "http://loripsum.net/api/plaintext")!)
  3. 调用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)

其他示例

加载JSON

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)")
}

在响应内容中不包含数据的情况下POST数据

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)")
}

加载XML

@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框架