#ios #swift #dictionary #alamofire #swift5
#iOS #swift #словарь #alamofire #swift5
Вопрос:
Привет, я пытаюсь передать в alamofire параметры, называемые «Dict», которые находятся в словаре…словарь может содержать 3 или X элементов. Я пытаюсь использовать для цикла словарь ad для другого набора элементов, but…it отображается только последний…кажется, это переопределяет предыдущий. Я перепробовал все, что знаю…Даже попробуйте использовать SwiftyJSON framework …. но alamofire принимает только чистый тип словаря.
var Dict = [[String: Any]]()
Dict.removeAll()
for (index, value) in _SurveySubmitModel.enumerated() {
print("Item (index 1): (value)")
let parameters: [String: Any] = [
"ID": value.ID,
"SurveyID": value.SurveyID,
"QuestionID": value.QuestionID,
"FilledBy": value.FilledBy,
"Response": value.Response
]
Dict.append(parameters)
}
print("Dict = (Dict)")
ну, мне нужно что-то вроде этого
[{
"ID": 0,
"SurveyID": 25,
"QuestionID": 28,
"FilledBy": 7335,
"Response": "1In the two weeks before you felt sick, did you:"
},
{
"ID": 0,
"SurveyID": 25,
"QuestionID": 28,
"FilledBy": 7335,
"Response": "1In the two weeks before you felt sick, did you:"
}
]
Комментарии:
1. Какой тип данных _SurveySubmitModel?
2. Привет @Prakash спасибо за ваш ответ, я использую эту модель, например: struct SurveySubmitModel: Codable { var ID = Int() var SurveyID = Int() var QuestionID = Int() var FilledBy = Int() var Response = String() }
3. тогда один элемент будет в _SurveySubmitModel? Это не массив или коллекция. Вместо этого вы можете использовать var surveryList = [SurveySubmitModel] и сохранить в нем все ваши данные.
4. да, я использую то же самое, что вы отправили: var _SurveySubmitModel = [SurveySubmitModel]() и добавляю такие данные, как: _SurveySubmitModel.append(SurveySubmitModel (ID: 0, SurveyID: 25, QuestionID: 28, FilledBy: 7335, Ответ: «1 За две недели до того, как вы почувствовали себя плохо, вы:» )) но Аламофайр это не поддержал. я думаю, что я пропустил какой-то шаг, можете ли вы сказать мне, поняли ли вы мою точку зрения?
5. Можете ли вы поделиться кодом, который собирает все данные в вашей коллекции? Чтобы я мог помочь
Ответ №1:
Попробуйте приведенный ниже код, который я изменил [String: Any]
на NSDictionary
. Также изменен for
цикл.
var _SurveySubmitModel = [SurveySubmitModel]()
_SurveySubmitModel.append(SurveySubmitModel(ID: 0, SurveyID: 25, QuestionID: 28, FilledBy: 7335, Response: "1In the two weeks before you felt sick, did you:"))
_SurveySubmitModel.append(SurveySubmitModel(ID: 0, SurveyID: 25, QuestionID: 28, FilledBy: 7335, Response: "1In the two weeks before you felt sick, did you:"))
for survey in _SurveySubmitModel {
let parameters: NSDictionary = [
"ID": survey.ID,
"SurveyID": survey.SurveyID,
"QuestionID": survey.QuestionID,
"FilledBy": survey.FilledBy,
"Response": survey.Response
]
Dict.append(parameters)
}
print("Dict == ", Dict)
Вывод
Dict == [{
FilledBy = 7335;
ID = 0;
QuestionID = 28;
Response = "1In the two weeks before you felt sick, did you:";
SurveyID = 25;
}, {
FilledBy = 7335;
ID = 0;
QuestionID = 28;
Response = "1In the two weeks before you felt sick, did you:";
SurveyID = 25;
}]
Попробуйте следующую функцию для вызова веб-службы
func postValues(requestParams: [[String: AnyObject]], urlString: String) {
let url = URL(string: urlString)
var request = URLRequest(url: url!)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = try! JSONSerialization.data(withJSONObject: requestParams, options: [])
AF.request(request).responseJSON { (response) in
switch response.result {
case .success:
// print(response.result.value)
break
case .failure:
print(response.error)
break
}
}
}
Комментарии:
1. Привет @Prakash, это решение работает, но мой вопрос в том, как я могу передать окончательный Dict в Alamofire в качестве параметра? поскольку Alamofire принимает только [String: Any], а не [[String: Any]], вот мой код, где я могу указать «Dict» ClientApi.objGlobalMethod. ServiceMethod(url: surveySubmitApi(sitename: SiteID), метод: «POST», параметры: Dict ) { (ответ) в печати («ответ = (response)»)
2. Если это метод POST, параметры должны отображаться в теле, поэтому просто выполните синтаксический анализ JSON (если это JSON) с помощью JSONSerilzaition и поместите его самостоятельно. Найдите все «Alamofire Array Parameter», вы увидите ответы.
3. Спасибо за ваше время @Prakash, теперь это работает, вы спасаете мой день.