2017-02-01 16 views
0

У меня есть пользовательский класс Beacon с методом toDictionary(), который возвращает пару значений ключа класса Beacon.Не могу передать словарь с массивами, чтобы запросить тело в swift

let detectedBeacon = Beacon(id: "QA", 
           strength: Float(234), 
           proximity: "far", 
           time: self.getISODateFormat(), 
           wasOffline: false, 
           osVersion: "ios 10", 
           batteryLevel: "12", 
           uuid: "adadaad", 
           majorId: 4, 
           minorId: 5, 
           section: "QA", 
           region: "temp") 


let array = [detectedBeacon.toDictionary()] 

Я создал массив с этим элементом словаря (на данный момент одна запись в массиве). Теперь я завернул этот массив в словарь, чтобы передать его в тело API.

let locationParams : Dictionary<String, AnyObject> = ["locations" : array as AnyObject] 
LocationApiManager.updateLastLocationOf(deviceId: deviceId, parameter: locationParams as [String : AnyObject]?) { 
     (response, errorMessage) in 

    } 

метод «updateLastLocation» вызывает запрос alamofire post.

Но сервер получает этот параметр следующим образом

{ 'locations[][section]': 'QA', 
    'locations[][uuid]': 'adadaad', 
    'locations[][region]': 'temp', 
    'locations[][userId]': '0001', 
    'locations[][minorId]': '5', 
    'locations[][proximity]': 'far', 
    'locations[][batteryLevel]': '12', 
    'locations[][majorId]': '4', 
    'locations[][beaconStrength]': '234', 
    'locations[][time]': '2017-02-01 06:42:03 +0000', 
    'locations[][osVersion]': 'ios 10', 
    'locations[][beaconId]': 'QA', 
    'locations[][wasOffline]': '0' } 

Почему это так?

Update

Мой метод ToDictionary

func toDictionary() -> [String : AnyObject] { 
    return (
     ["beaconId": self.beaconId as AnyObject, 
     "beaconStrength": self.beaconStrength as AnyObject, 
     "proximity": self.proximity as AnyObject, 
     "time": NSDate() as AnyObject, 
     "wasOffline": self.wasOffline as AnyObject, 
     "osVersion": self.osVersion as AnyObject, 
     "batteryLevel": self.batteryLevel as AnyObject, 
     "uuid": self.uuid as AnyObject, 
     "majorId": self.majorId as AnyObject, 
     "minorId": self.minorId as AnyObject, 
     "section": self.section as AnyObject, 
     "region": self.region as AnyObject, 
     "userId": "0001" as AnyObject] 
    ) 
} 

Метод местоположение обновлений содержит некоторые, что подобный код, как это:

class func postData(apiEndPoint: String, 
        parameters: [String: AnyObject]?, 
         headers: HTTPHeaders, 
        completion: 
         @escaping (_ responseFromBaseAPI : [String : AnyObject]?) ->()) -> Bool { 
    UIApplication.shared.isNetworkActivityIndicatorVisible = true 


    Alamofire.request(apiEndPoint, 
          method: .post, 
         parameters: parameters, 
          encoding: URLEncoding.httpBody, 
          headers: headers).responseJSON { result in 
      completion(result.result.value as? [String: AnyObject]) 
      UIApplication.shared.isNetworkActivityIndicatorVisible = false 
     } 
    return true 
} 
+0

@EricAya обновленный –

ответ

0

Ну, вы создаете массив здесь, который содержит словарь как только элемент:

let array = [detectedBeacon.toDictionary()] 

Вы не хотите передавать словарь напрямую под ключ location? Вы можете попробовать просто пройти detectedBeacon.toDictionary() вместо [detectedBeacon.toDictionary()].

На самом деле я имел в виду, что LocationApiManager.updateLastLocationOf может ожидать другую структуру. Как этот метод реализован? Какой параметр он ожидает?

Update:

Ну, что вы на самом деле ожидать на сервере? Вы не отправляете JSON, а просто строковое представление словаря правильно?

+0

недоверенный вопрос с обновлениемLastLocation способ. –