Отправка массива в alamofire - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над быстрым проектом для напоминания о лекарстве и приложением, работающим в автономном режиме и онлайн, так что пользователь может сохранить много напоминаний, и как только Интернет станет доступен, мне нужно отправить массив объектов в API.Я использую Alamofire 4.4, и вот мой код, чтобы получить параметры и поместить его в массив

var medArrTosendToServer =  [(_id:String, _timing:String)]()

    func getParameters() -> [[String: AnyObject]] {
    var result = [[String: AnyObject]]()

    for med in medArrTosendToServer {
        let medRes: [String: AnyObject] = [
            "device_id": DEVICE_ID as AnyObject,
            "userProfileID": userProfileID as AnyObject,
            "medName": med._medName as AnyObject,
            "timing": med._timing as AnyObject

        ]
        result.append(medRes)
    }
    print(result)
    return result
}

и в функции sned для сервера

    func sendDataToServer() {

        let param  = getParameters()

        Alamofire.request(URL_POST_UserProfile, method: .post, parameters: param )

            .responseJSON

            { response in

                switch response.result {

                case .success( _):

                    if let JSON = response.result.value{

// here if success

                    }

                case .failure(let error):

                    print(error)

                   // self.stopAnimating()

                }

        }   

    }else{

        //self.stopAnimating()

    }

}

, но я получаюошибка говорит "Дополнительный аргумент" метод "в вызове".так что если у кого-то есть идея разобраться с этим делом, пожалуйста, поделитесь им со мной

Спасибо

1 Ответ

0 голосов
/ 05 июня 2018

Поскольку Alamofire parameters ожидает тип [String: Any], вам необходимо создать URLRequest и добавить ваше тело Array следующим образом:

func uploadDataToServer(dataToUpload: [[String: Any]], completionHandler:@escaping (Bool) -> ()){

    let urlString            = "Your url string"
    guard let url = URL(string: urlString) else {
        return
    }
    var request        = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    do {
        request.httpBody   = try JSONSerialization.data(withJSONObject: dataToUpload)
    } catch let error {
        print(error)
    }


    Alamofire.request(request).responseJSON{ (response) in

        print("Success: \(response)")
        switch response.result{
        case .success:
            if let statusCode: Int = response.response?.statusCode {
                switch statusCode{
                case 200:
                    completionHandler(true)
                    break
                default:
                    completionHandler(false)
                    break
                }
                break
            }
        case .failure:
            completionHandler(false)
            break
        }
    }
}

Также [String: Any] isлучший вариант, потому что он может хранить значение Any-Type, но AnyObject займет только Object-Type.Также [[String: AnyObject]] не Array из Array, это Array из Dictionaries.

...