पर पैरामीटर एन्कोडिंग अनुरोध हाल ही में अलामोफायर 4 में अपग्रेड किया गया है और कुछ मुद्दों में चल रहा है। अलामोफायर राउटर में जेएसओएन को यूआरएल अनुरोध पैरामीटर को एन्कोड करने के बारे में सोचें। यहां उदाहरण है जिसका मैं अलामोफायर 3 में अनुसरण कर रहा था।अलामोफ़ीयर 4 यूआरएल 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
}
}
ऐसा लगता है कि अब अलामोफ़ीयर 4 में यह बदल दिया गया है।
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
यहां मैं अलामोफायर 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
असल में मैंने कोशिश की, लेकिन मुझे एक्सकोड में मिली त्रुटि पर ध्यान नहीं दिया। ऐसा लगता है कि अधिसूचना टोकन कुंजी में शून्य के कारण मेरा डिवाइस डिक्शनरी ऑब्जेक्ट बुरी तरह से बनाया गया था। ["अधिसूचना टोकन": वैकल्पिक (शून्य), "डिवाइसआईडी": "6f61f29e-c01b-4010-b587-74b2a0bdf96b"] – user2498258