2016-03-20 3 views
-1

У меня есть идентификаторы arrayOfDictionaries, которые были переданы в Table View Controller из readyForSegue.Как извлечь пары ключевых значений из массива словарей? Swift 2.0

Я хочу извлечь пары ключей, значений и удержать их в новом объекте arrayToDisplay.

Я инициализируется свою модель данных коллекции в моей viewWillAppear, но я мог бы использовать некоторую помощь с моей функции LoadData и как поместить данные в новый arrayToDisplay

Table View Controller:

// data model 
var collection: Collection! 
var arrayToDisplay = [String: AnyObject]() 

// data from previous controller, data is there 
var arrayOfDictionaries = [[String: AnyObject]]() 

viewWillAppear() 
collection = Collection(id: "", photo: "", one: 0, two: 0, three: 0) 
loadData() 

func loadData() { 

    for dict in arrayOfDictionaries { 

     for (key, value) in dict { 

      if key == "photo" { 
       self.collection!.photo = value as! String 
       arrayToDisplay += [key: value] 
      } 

      else if key == "id" { 
       self.collection!.id = value as! String 
       arrayToDisplay += [key: value] 
      } 

      else if key == "one" { 
        ... 

Одна проблема, которую я столкнулись с тем, что «ключ» не изменяется, когда он изменяется от одного словаря к другому.

Любая помощь? Благодаря

+0

Не уверен ... кажется, что ваш 'arrayToDisplay' должен быть' [Collection] ', если вы хотите, чтобы каждая ячейка в вашей таблице была представлена ​​другим объектом' Collection'. –

+0

Это псевдокод. Можете ли вы предоставить код, который я действительно могу попробовать? – ryantxr

ответ

-1

удалить еще

if key == "photo" { 
    self.collection!.photo = value as! String 
    arrayToDisplay += [key: value] 
} 

if key == "id" { 
    self.collection!.id = value as! String 
    arrayToDisplay += [key: value] 
} 
+0

Я попытался это изначально. Не работает, к сожалению, но спасибо за совет – Dazzle

+0

Я тестировал его сам, все работало нормально, проверяли ли вы, что данные из предыдущего контроллера правильно заполняли arrayOfDictionaries? print arrayOfDictionaries в viewWillAppear перед вызовом loadData() и посмотреть, содержит ли он все ключи, кроме –

+0

Привет, Sameh, установите, что arrayOfDictionaries отлично отпечатывается. Любая идея, где мой код неправильный? Благодаря! – Dazzle

0

Я сделал маленький класс тестер, чтобы попробовать это. Кажется, работает нормально. Может быть, я не понимаю, чего вы ожидаете от этого.

class ArrayDictTest { 
    // data from previous controller, data is there 
    var arrayOfDictionaries = [[String: AnyObject]]() 
    var arrayToDisplay = [String: AnyObject]() 

    func setup() { 
     arrayOfDictionaries.append(["photo" : "some photo 1", "id" : "199"]) 
     arrayOfDictionaries.append(["photo" : "some photo 2", "id" : "299"]) 
     arrayOfDictionaries.append(["photo" : "some photo 3", "id" : "399"]) 
    } 


    func loadData() -> [String] 
    { 
     // capture what happened 
     var toReturn = [String]() 
     for dict in arrayOfDictionaries { 

      for (key, value) in dict { 
       print(key) 
       toReturn.append(key) 
       if key == "photo" { 
    //    self.collection!.photo = value as! String 
        arrayToDisplay[key] = value 
       } 

       else if key == "id" { 
    //    self.collection!.id = value as! String 
        arrayToDisplay[key] = value 
       } 
      } 
     } 
     return toReturn 
    } 
} 

let mytest = ArrayDictTest() 
mytest.setup() 
mytest.loadData() 

Что такое коллекция?

1

я был в состоянии решить эту проблему с помощью пункта переключателя

func loadData() { 

    for dict in arrayofDict { 

      for (key, value) in dict { 

       switch key { 

       case "photo": 
       ... 
       case "id"" 
       ... 
      } 

Надеется, что это помогает кто-то!