5
최근에 Alamofire 4로 업그레이드되어 몇 가지 문제가 있습니다. Alamofire Router의 JSON에 URL 요청 매개 변수를 인코딩하는 방법을 알고 싶습니다. 여기에 내가Alamofire 4 URL 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
}
}
그것은 지금 Alamofire 4이 변경되었습니다 보인다 Alamofire 3에 다음의 한 예이다.
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
여기는 Alamofire 4 라우터로 시도하고 있지만 예상대로 작동하지 않습니다.
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
사실 나는 그것을 시도했지만 xcode에 오류가 발생했다는 것에 주목하지 않았습니다. notificationToken 키에 nil로 인해 장치 사전 객체가 잘못 작성 된 것으로 보입니다. [ "notificationToken": 선택 사항 (nil), "deviceId": "6f61f29e-c01b-4010-b587-74b2a0bdf96b"] – user2498258