このアプローチ全体をSwift 3に変更する方法を知っている人はいますか?現時点では、これと非常によく似たものがありますSwift 2.2ですが、今はmそれをSwift 3に変更しようとしています。
「URLRequestConvertible」、Alamofire.Method(HTTPMethodに変更して現在機能している)、およびパラメーターエンコーディングでエラーが発生しますが、プロトコル全体に準拠していません。
Alamofireのエンジニアからの指導を待っていますが、その間に何ができるかを考えています。
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.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)"
}
}
// MARK: URLRequestConvertible
var URLRequest: NSMutableURLRequest {
let URL = NSURL(string: Router.baseURLString)!
let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
mutableURLRequest.HTTPMethod = method.rawValue
if let token = Router.OAuthToken {
mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
}
switch self {
case .CreateUser(let parameters):
return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
case .UpdateUser(_, let parameters):
return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
default:
return mutableURLRequest
}
}
}
URLRequestConvertible
プロトコル):lotが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
大文字小文字が小文字になりましたので、これも採用する必要があります。var urlRequest
ではなくvar URLRequest
が必要です(次のポイントと競合します)NS
プレフィックスは多くの場所にあります。 NSURLRequest
とNSMutableURLRequest
はURLRequest
になり、NSURL
はURL
になります。URLByAppendingPathComponent
がどのように変更されたかを参照してください。そしてAlamofirev4に関しては:
ParameterEncoding
プロトコルがありますが、より用途が広いです。そして最後のアドバイス:時間に敏感な場合は、プログラミング言語またはAPIのリリースされていないバージョンへの移行を避けてください。 Swift 3はそれほど動揺しませんが、Alamofireはまだ動揺する可能性があります!たとえば、ParameterEncoding
プロトコルはたった2日しか経っていません!上記のバージョン)
乾杯