Được nâng cấp gần đây lên Alamofire 4 và gặp phải một vài sự cố. Tự hỏi cách mã hóa tham số yêu cầu url thành JSON trong Alamofire Router. Dưới đây là ví dụ tôi đã theo dõi trong Alamofire 3.Mã hóa tham số yêu cầu URL Alamofire 4 thành JSON
enum UserRouter: URLRequestConvertible {
static let baseURLString = "http://jsonplaceholder.typicode.com/"
case Get(Int)
case Create([String: AnyObject])
case Delete(Int)
var URLRequest: NSMutableURLRequest {
var method: Alamofire.Method {
switch self {
case .Get:
return .GET
case .Create:
return .POST
}
}
let params: ([String: AnyObject]?) = {
switch self {
case .Get:
return (nil)
case .Create(let newPost):
return (newPost)
}
}()
let url:NSURL = {
let relativePath:String?
switch self {
case .Get(let postNumber):
relativePath = "posts/\(postNumber)"
case .Create:
relativePath = "posts"
}
var URL = NSURL(string: PostRouter.baseURLString)!
if let relativePath = relativePath {
URL = URL.URLByAppendingPathComponent(relativePath)
}
return URL
}()
let URLRequest = NSMutableURLRequest(URL: url)
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
encodedRequest.HTTPMethod = method.rawValue
return encodedRequest
}
}
Có vẻ như trong Alamofire 4 điều này đã được thay đổi.
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
Đây là những gì tôi đang thử với Bộ định tuyến Alamofire 4, nhưng không hoạt động như mong đợi.
func asURLRequest() throws -> URLRequest {
let url = try UserRouter.baseURLString.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
urlRequest.httpMethod = method.rawValue
switch self {
case .updateDeviceToken(_,let device):
urlRequest = try ParameterEncoding.encode(urlRequest as URLRequestConvertible, with: device)
//urlRequest = try JSONEncoding.default.encode(urlRequest, with: device)
case .addUser(_, let user):
urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
case .updateUser(_,_,let user):
urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
case .lockUser(_,_,let user):
urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
default:
break
}
return urlRequest
Thực ra tôi đã thử điều đó, nhưng đã không chú ý đến lỗi tôi đã nhận được trong xcode. Có vẻ như đối tượng từ điển trên thiết bị của tôi bị tạo thành không đúng do không có khóa thông báo. ["notificationToken": tùy chọn (nil), "deviceId": "6f61f29e-c01b-4010-b587-74b2a0bdf96b"] – user2498258