swift开发之Alamofire

来源:互联网 发布:信捷plc编程线usb驱动 编辑:程序博客网 时间:2024/06/06 02:09

要获取最新版本的 Alamofire,前往https://github.com/Alamofire/Alamofire然后单击网页右边的Download ZIP按钮。接着在 Finder 中打开起始项目文件夹,然后将Alamofire-master文件夹拖入到您的主项目文件夹中。

155.jpg

打开Alamofire-master文件夹(现在它位于您的项目文件夹中),然后将Alamofire.xcodeprij文件(注意是蓝色图标!不是白色图标!)直接拖进 Xcode 中的 Photomania 项目下面,如下图所示:

166.jpg

接下来,单击Photomania项目,进入General窗口。滚动到Embedded Binaries项,然后单击其下方的 + 号。选择Alamofire.framework,最后点击Add完成添加。

144.jpg

生成并运行您的项目以确保没有任何错误出现,然后就可以进入到下一节内容了。

Alamofire使用方法

GET 请求

Alamofire.request(.GET, "http://httpbin.org/get")
带参数
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
Response结果处理
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])         .response { (request, response, data, error) in                     println(request)                     println(response)                     println(error)                   }
Response结果字符串处理
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])         .responseString { (request, response, string, error) in                  println(string)         }

HTTP 方法(Medthods)

Alamofire.Method enum 列表出在RFC 2616中定义的HTTP方法 §9:

public enum Method: String {    case OPTIONS = "OPTIONS"    case GET = "GET"    case HEAD = "HEAD"    case POST = "POST"    case PUT = "PUT"    case PATCH = "PATCH"    case DELETE = "DELETE"    case TRACE = "TRACE"    case CONNECT = "CONNECT"}

这些值可以作为Alamofire.request请求的第一个参数.

Alamofire.request(.POST, "http://httpbin.org/post")Alamofire.request(.PUT, "http://httpbin.org/put")Alamofire.request(.DELETE, "http://httpbin.org/delete")

POST请求

let parameters = [    "foo": "bar",    "baz": ["a", 1],    "qux": [        "x": 1,        "y": 2,        "z": 3    ]]Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)

发送以下HttpBody内容:

foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3

Alamofire 使用Alamofire.ParameterEncoding可以支持URL query/URI form,JSON, PropertyList方式编码参数。

Parameter Encoding
enum ParameterEncoding {    case URL    case JSON(options: NSJSONWritingOptions)    case PropertyList(format: NSPropertyListFormat,                      options: NSPropertyListWriteOptions)    func encode(request: NSURLRequest,                parameters: [String: AnyObject]?) ->                    (NSURLRequest, NSError?)    { ... }}
NSURLRequest方式编码参数
let URL = NSURL(string: "http://httpbin.org/get")var request = NSURLRequest(URL: URL)let parameters = ["foo": "bar"]let encoding = Alamofire.ParameterEncoding.URL(request, _) = encoding.encode(request, parameters)
POST JSON格式数据
Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON(options: nil))         .responseJSON {(request, response, JSON, error) in            println(JSON)         }

Response 方法

  • response()
  • responseString(encoding: NSStringEncoding)
  • responseJSON(options: NSJSONReadingOptions)
  • responsePropertyList(options: NSPropertyListReadOptions)

上传(Uploading)

支持的类型
  • File
  • Data
  • Stream
  • Multipart (Coming Soon)
上传文件
let fileURL = NSBundle.mainBundle()                      .URLForResource("Default",                                      withExtension: "png")Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)

上传进度

Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)        .progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in            println(totalBytesWritten)        }        .responseJSON { (request, response, JSON, error) in            println(JSON)        }

下载

支持的类型
  • Request
  • Resume Data
下载文件
Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: { (temporaryURL, response) in    if let directoryURL = NSFileManager.defaultManager()                          .URLsForDirectory(.DocumentDirectory,                                            inDomains: .UserDomainMask)[0]                          as? NSURL {        let pathComponent = response.suggestedFilename        return directoryURL.URLByAppendingPathComponent(pathComponent)    }    return temporaryURL})
下载到默认路径
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
下载进度
Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)         .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in             println(totalBytesRead)         }         .response { (request, response, _, error) in             println(response)         }

认证(Authentication)

支持以下几种认证
  • HTTP Basic
  • HTTP Digest
  • Kerberos
  • NTLM
Http basic认证
let user = "user"let password = "password"Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")    .authenticate(HTTPBasic: user, password: password)    .response {(request, response, _, error) in        println(response)        }
采用NSURLCredential&NSURLProtectionSpace方式认证
let user = "user"let password = "password"let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)let protectionSpace = NSURLProtectionSpace(host: "httpbin.org", port: 0, `protocol`: "https", realm: nil, authenticationMethod: NSURLAuthenticationMethodHTTPBasic)Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")    .authenticate(usingCredential: credential, forProtectionSpace: protectionSpace)    .response {(request, response, _, error) in        println(response)}欢迎转载,转载请注明出处http://blog.csdn.net/colinasd

Printable

let request = Alamofire.request(.GET, "http://httpbin.org/ip")println(request)// GET http://httpbin.org/ip (200)

调试

    let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])debugPrintln(request)

Output (cURL)

$ curl -i \    -H "User-Agent: Alamofire" \    -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \    -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \    "http://httpbin.org/get?foo=bar"

0 1