0
votes

I'm currently using cocoapods 1.1.0.rc.2. I've installed the Alamofire pod. With version 1.1.0.rc.2 it should work with swift 3.0. However I'm trying to declare the following enum

enum Router: URLRequestConvertible {
        static let baseURLString = "https://api.instagram.com"
        static let clientID = "myID"
        static let redirectURI = "http://www.example.com/"
        static let clientSecret = "mySecret"

        case PopularPhotos(String, String)
        case requestOauthCode

        static func requestAccessTokenURLStringAndParms(code: String) -> (URLString: String, Params: [String: AnyObject]) {
            let params = ["client_id": Router.clientID, "client_secret": Router.clientSecret, "grant_type": "authorization_code", "redirect_uri": Router.redirectURI, "code": code]
            let pathString = "/oauth/access_token"
            let urlString = Instagram.Router.baseURLString + pathString
            return (urlString, params as [String : AnyObject])
        }

        // MARK: URLRequestConvertible

        var URLRequest: NSMutableURLRequest {
            let result: (path: String, parameters: [String: AnyObject]?) = {
                switch self {
                case .PopularPhotos (let userID, let accessToken):
                    let params = ["access_token": accessToken]
                    let pathString = "/v1/users/" + userID + "/media/recent"
                    return (pathString, params as [String : AnyObject]?)

                case .requestOauthCode:
                    let pathString = "/oauth/authorize/?client_id=" + Router.clientID + "&redirect_uri=" + Router.redirectURI + "&response_type=code"
                    return (pathString, nil)
                }
            }()

            let baseURL = NSURL(string: Router.baseURLString)!
            let URLRequest = NSURLRequest(url: NSURL(string: result.path ,relativeTo:baseURL as URL)! as URL)
            let encoding = Alamofire.ParameterEncoding.encode(baseURL as! ParameterEncoding)
            //let encoding = Alamofire.ParameterEncoding.URL
            return encoding.encode(URLRequest, parameters: result.parameters).0
        }
    }

However I get the following error when building this.

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

Does anyone know what I'm missing here?

1
I'm getting same problem. Did you find any solution for this. Thanksravi sendhav
@ravisendhav No I didn't find anything yet unfortunatelyNoSixties
You can check solution of this in my below post.ravi sendhav

1 Answers

1
votes
enum Router: URLRequestConvertible {

    static let baseURLString = "www.google.com"


    case getToken([String: AnyObject])

    var method: HTTPMethod {

        switch self {
        case .getToken:
            return .post
        default:
            break

        }
    }

    var path: String {
        switch self {
        case .getToken:
            return "token"
        default:
            break
        }
    }


     func asURLRequest() throws -> URLRequest {

        let url = Foundation.URL(string: baseURLString)!

        var urlRequest = URLRequest(url: url.appendingPathComponent(path))
        urlRequest.httpMethod = method.rawValue


        urlRequest.setValue("application/json", forHTTPHeaderField: "Content")
        urlRequest.setValue("keep-alive", forHTTPHeaderField: "Connection")

        switch self {
        case .getToken(let parameters):
            urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
        default:
            break
        }
        return urlRequest

    }
}