2016-04-23 2 views
3

RESOLVED! См. Решение внизу этого сообщения.Как добавить массив <String> в словарь <String, AnyObject> в Swift 2

Я пытаюсь создать объект JSON для использования на моем бэкэнд, используя Alamofire. Я могу добавить ключ со значением String, но, похоже, не могу добавить значение Array в AnyObject. Я, хотя это было бы очень просто, но я не смог найти решение.

func someFunction(btn: UIButton){ 

     var someDictionary = Dictionary<String, AnyObject>() 
     let someArray = [textField[1].text,textField[2].text,textField[3].text] 
     someDictionary["answer"] = textField[0].text 
     someDictionary["options"] = someArray as? Array // <---- Can't be assigned to AnyObject 

     let url = "http://localhost:3000/api/question" 
     Alamofire.request(.POST, url, parameters: someDictionary).responseJSON { response in 
      if let JSON = response.result.value as? Dictionary<String, AnyObject>{ 
      } 
     } 

} 

Решение: Удалены as? Array и создал цикл для добавления инициализируется

составлять список присяжных заседателей
func someFunction(btn: UIButton){ 



     var someDictionary = Dictionary<String, AnyObject>() 
     var SomeArray = [String]() 
     for i in 1...3{       //created loop to append the textField text 
      SomeArray.append(textField[i].text!) 
     } 
     someDictionary["answer"] = textField[0].text 
     someDictionary["options"] = SomeArray // Removed "as? Array" 
     let url = "http://localhost:3000/api/question" 
     Alamofire.request(.POST, url, parameters: someDictionary).responseJSON { response in 
      if let JSON = response.result.value as? Dictionary<String, AnyObject>{ 
       print("JSON Response From Server-->\(JSON)") 


      } 
     } 

    } 

ответ

2

Очистите свой проект и запустить снова. Ваш код работает на меня, и я могу назначить

func someFunction(btn: UIButton){ 

    var someDictionary = Dictionary<String, AnyObject>() 
    let someArray = ["SomeString","SomeString","SomeString"] 
    someDictionary["answer"] = textFields[0].text 
    someDictionary["options"] = someArray // now you can assign 

    let url = "http://localhost:3000/api/question" 
    Alamofire.request(.POST, url, parameters: someDictionary).responseJSON { response in 
     if let JSON = response.result.value as? Dictionary<String, AnyObject>{ 
     } 
    } 

} 
+0

Спасибо за ответ. Это решает проблему с массивом, но мне также нужно передать значение String в словарь в строке 'someDictionary [" answer "] = textFields [0] .text'. Есть ли способ разрешить использование строк и массивов в словаре? EDIT: после тестирования вашего решения Кажется, что запрос Alamofire нужен тип Dictionary

+1

В этом случае я предлагаю вам использовать NSMutableDictionary вместо использования Swift Dictionary. – user3815344

+1

@JeffA Я изменил свой ответ на использование NSMutableDictionary вместо быстрого словаря. Взгляни. – user3815344

Смежные вопросы