Gab*_*dia 12 ios swift alamofire swift3
有谁知道如何改变Swift 3的整个方法?在这一刻,我有一些非常类似于Swift 2.2的工作正常,但现在我正在尝试将其更改为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
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*ugg 36
URLRequestConvertible具有投掷功能的更新协议):在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 3的主要变化是:
enum 案件现在是小写的,你也应该采用它.var urlRequest而不是var URLRequest(并且它会与下一点发生冲突)NS许多地方的再见前缀.NSURLRequest而NSMutableURLRequest现在URLRequest,NSURL是URL等URLByAppendingPathComponent更改.至于Alamofire v4:
ParameterEncoding编码参数的新协议本身不同但功能更多最后的建议是:如果时间敏感,请避免迁移到未发布的编程语言版本或API.Swift 3不会让步,但Alamofire仍然可能!例如,ParameterEncoding协议只有两天了!(编辑:事实上它已经改变了,现在在上面的最终版本中)
干杯