2016-10-05 6 views
5

पर पैरामीटर एन्कोडिंग अनुरोध हाल ही में अलामोफायर 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 

उत्तर

7

मैं इस एन्कोडिंग सिंटैक्स का उपयोग करें: जब तक मैं एक साधारण पाया

let encoding = Alamofire.JSONEncoding.default 

मैं भी इस मुद्दे के साथ संघर्ष कर रहा था,:

... 
method: .get, 
parameters: parameters, 
encoding: JSONEncoding.default, 
headers: nil, 
... 

आपके मामले में, इसे इस तरह हो सकता है उदाहरण यहां:

https://github.com/Alamofire/Alamofire#json-encoding

+0

असल में मैंने कोशिश की, लेकिन मुझे एक्सकोड में मिली त्रुटि पर ध्यान नहीं दिया। ऐसा लगता है कि अधिसूचना टोकन कुंजी में शून्य के कारण मेरा डिवाइस डिक्शनरी ऑब्जेक्ट बुरी तरह से बनाया गया था। ["अधिसूचना टोकन": वैकल्पिक (शून्य), "डिवाइसआईडी": "6f61f29e-c01b-4010-b587-74b2a0bdf96b"] – user2498258

संबंधित मुद्दे