Ответ 1
EDITED для выпуска Alamofire 4.0.0 (обновленный протокол URLRequestConvertible
с возможностью метания):
A лот изменился в Swift 3, и вы должны сначала прочитать все изменения, возможно, начиная с http://swift.org. Здесь фиксированный код:
enum Router: URLRequestConvertible {
static let baseURLString = "http://example.com"
static var OAuthToken: String?
case createUser([String: AnyObject])
case readUser(String)
case updateUser(String, [String: AnyObject])
case destroyUser(String)
var method: Alamofire.HTTPMethod {
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)"
}
}
func asURLRequest() throws -> URLRequest {
let url = URL(string: Router.baseURLString)!
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
urlRequest.httpMethod = method.rawValue
if let token = Router.OAuthToken {
urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
}
switch self {
case .createUser(let parameters):
return try Alamofire.JSONEncoding.default.encode(urlRequest, with: parameters)
case .updateUser(_, let parameters):
return try Alamofire.URLEncoding.default.encode(urlRequest, with: parameters)
default:
return urlRequest
}
}
}
Основные изменения для Swift 3:
-
enum
случаи теперь строчные, и вы также должны принять его. - Теперь переменные имена начинаются с строчных букв, даже если это аббревиатура типа "URL". Поэтому для протокола требуется
var urlRequest
, а неvar urlRequest
(и это противоречило бы следующей точке) - Bye-bye
NS
префикс во многих местах.NSURLRequest
иNSMutableURLRequest
теперьURLRequest
,NSURL
естьURL
и т.д. - Как вы называете свои функции и параметры в настоящее время намного менее избыточными и более естественными. См. Например, как изменился
URLByAppendingPathComponent
.
А что касается Alamofire v4:
- Новый протокол
ParameterEncoding
для параметров кодирования сам по себе отличается, но более универсален. - МНОГО других изменений, которые не имеют никакого влияния здесь, но вы обязательно должны прочитать о них тоже.
И последнее слово совета: не переходите к неизданным версиям языка программирования или API, если это зависит от времени. Swift 3 не сдвинется с места, но Alamofire все еще может! Например, протокол ParameterEncoding
составляет всего два дня! (EDIT: и действительно, это изменилось, так как теперь в его окончательной версии выше)
Приветствия