Announce enum Router Alamofire swift 2.0

I try to follow Mattโ€™s example, but I am facing some strange situation. I created one file called Router.swift and paste the following code:

//
//  Router.swift

import Alamofire

enum Router: URLRequestConvertible {
static let baseURLString = "http://example.com"

case CreateUser([String: AnyObject])
case ReadUser(String)
case UpdateUser(String, [String: AnyObject])
case DestroyUser(String)

var method: Alamofire.Method {
    switch self {
    case .CreateUser:
        return .POST
    case .ReadUser:
        return .GET
    case .UpdateUser:
        return .PUT
    case .DestroyUser:
        return .DELETE
    }
}

var path: String {
    switch self {
    case .CreateUser:
        return "/users"
    case .ReadUser(let username):
        return "/users/\(username)"
    case .UpdateUser(let username, _):
        return "/users/\(username)"
    case .DestroyUser(let username):
        return "/users/\(username)"
    }
}
}

And I get the following error:

Type 'Router' does not conform to protocol 'URLRequestConvertible'

I am using the Alamofire swift-2.0 branch of Xcode 7R6

Any idea?

thanks

+4
source share
3 answers

You must add

  var URLRequest: NSURLRequest {...}

to an enumeration that generates and returns NSURLRequestfrom your other components, such as pathormethod

Example:

var URLRequest: NSURLRequest {

    let URL = NSURL(string: baseURLString)!
    let mutableURLRequest = path != nil ? NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path!)) : NSMutableURLRequest(URL: URL)
    mutableURLRequest.HTTPMethod = method.rawValue
    if let authorizationHeader = authorizationHeader { mutableURLRequest.setValue(authorizationHeader, forHTTPHeaderField: "Authorization") }
    let encoding = Alamofire.ParameterEncoding.URL

    return encoding.encode(mutableURLRequest, parameters: [ "foo": "bar" ]).0

}
+1
source

From the Alamofire documentation, the URLRequest should be NSMutableURLRequest, not NSURLRequest.

So, in the above example, change to the following:

var URLRequest: NSMutableURLRequest {

    let URL = NSURL(string: baseURLString)!
    let mutableURLRequest = path != nil ? NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path!)) : NSMutableURLRequest(URL: URL)
    mutableURLRequest.HTTPMethod = method.rawValue
    if let authorizationHeader = authorizationHeader { mutableURLRequest.setValue(authorizationHeader, forHTTPHeaderField: "Authorization") }
    let encoding = Alamofire.ParameterEncoding.URL

    return encoding.encode(mutableURLRequest, parameters: [ "foo": "bar" ]).0

}
+4
source

URLRequestConvertible, NSURLRequest URLRequest.

Swift 1.2 , NSMutableURLRequest NSURLRequest:

enum Router: URLRequestConvertible{

static let baseURLString = ""
static let clientId = ""
static let clientSecret = ""

case NewUser(String, String, String)

var URLRequest: NSMutableURLRequest {

    var path: String {
        switch self {
        case .NewUser:
            return "/users"
        }
    }

    var parameters: [String: AnyObject] {
        switch self {
        case .NewUser (let userName, let email, let password):
            let params = ["Username": userName, "Email": "\(email)", "Password": password, "Client_Id": Router.clientId,  "Client_Secret": Router.clientSecret]
            return params
        }
    }

    let URL = NSURL(string: Router.baseURLString)
    let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path))
    let encoding = Alamofire.ParameterEncoding.URL

    return encoding.encode(URLRequest, parameters: parameters).0
}

}
+1

Source: https://habr.com/ru/post/1605856/


All Articles