2017-02-18 34 views
0

Обновление синтаксиса Alamofire to Swift 3 Мне интересно, какой будет самый безопасный способ обновления маршрутизатора на основе URLRequestConvertible (раздел кода в настоящее время не соответствует). Я пробовал несколько вещей, но я чувствую, что кодировка URL может немного измениться.Обновление кода маршрутизатора до Alamofire 4.0 и Swift 3

Хотя, похоже, Alamofire сильно изменил ошибки, которые я вижу непосредственно, так это то, что «.GET» запускает ошибку компилятора, также как и ParameterCoding.URL, которая больше не действительна.

Узор код у меня есть (вероятно, по крайней мере, 30 различных мест в моем коде) является:

// MARK: - AlamoFire Router 
enum Router: URLRequestConvertible 
{ 
    static let baseURL = Singleton.sharedInstance.apiURL 
    static let apiKey: String = Singleton.sharedInstance.apiKey 
    static let applicationId: String = Singleton.sharedInstance.applicationId 

    case userPoints() 

    var method: Alamofire.Method 
    { 
     switch self 
     { 
      case .userPoints: 

       return .GET 
     } 
    } 


    var path: String 
    { 
     switch self 
     { 
      case .userPoints: 

       return "https://stackoverflow.com/users/points/user/\(Singleton.sharedInstance.user.id)" 
     } 
    } 

    var URLRequest: NSMutableURLRequest 
    { 
     let URL_val = URL(string: Router.baseURL)! 

     let mutableURLRequest = NSMutableURLRequest(URL: URL_val.URLByAppendingPathComponent(path)) 
     mutableURLRequest.HTTPMethod = method.rawValue 

     // Send API key and Application ID in the header 
     mutableURLRequest.setValue("API-Key apiKey=\(Router.apiKey) applicationId=\(Router.applicationId)", forHTTPHeaderField: "X-Authorization") 

     let encoding = ParameterEncoding.URL 

     #if DEBUG 
      print(mutableURLRequest) 
     #endif 

     switch self 
     { 
      case .userPoints: 

       return encoding.encode(mutableURLRequest, parameters: nil).0 
     } 
    } 
} 

Очень надеюсь, кто-то с пониманием в Alamofire и Swift 3 может помочь мне выяснить решение соответствовать перемены.

Большое спасибо заранее!

ответ

1

Я знаком с установкой. .Get необходимо изменить на .get для одной вещи.

let URL_val = Router.baseURL.asURL()

var urlRequest = URLRequest(url: URL_val.appendingPathComponent(path))

ход возвращение за пределы заявления выключателя и переместить его после.

изменения var urlRequest в func asURLRequest() throws -> URLRequest

switch self { 
case .userPoints: 
    urlRequest = try URLEncoding.default.encode(urlRequest, with: nil) 
} 

return urlRequest 

они имеют полный рабочий пример в их документации в соответствии с CRUD & авторизации

+0

Спасибо за ответ! Могли бы вы изменить код, чтобы включить ваши изменения? Что касается .url, я действительно пытался, но компилятор дает вам «Type» Method (он же OpaquePointer) не имеет никакого члена 'get' ' – nights

+1

изменить метод 'var method: HTTPMethod' что-нибудь еще, что вы должны найти легко в документах alamofire в разделе «Запросы маршрутизации». Если это не исправить все, что вы должны быть довольно близко, потому что я не заметил ничего с кодом, который вы предоставили, что должно быть проблемой. – JustinM

+0

Хорошо. Благодарю. Как насчет этой строки: mutableURLRequest.setValue («API-ключ apiKey = \ (Router.apiKey) applicationId = \ (Router.applicationId)», forHTTPHeaderField: «X-Authorization») все это происходит за кулисами в новом Alamofire течь? – nights