2016-01-29 4 views
0

Нужно

Что я хочу сделать, это цикл этих результатов json; для каждой из категорий создать заголовок в UITableView и для каждой из должностей по категории создают Tableview ячейкуSwift Добавление к массиву Изнутри Loop

Файлы проекта

https://jumpshare.com/v/Otai3BBXYwfvyz8jb53k

Проблема

По какой-то причине, когда я пытаюсь добавить к массиву, сформировать внутри цикла for, который он не добавляет.

Вот мой код:

Alamofire.request(.GET, url).validate().responseJSON { response in 
     switch response.result { 
     case .Success: 
      if let value = response.result.value { 
       let json = JSON(value) 

       for (_, subJson) in json { 
        for (index, data) in subJson { 
         for (title, objects) in data { 
          sectionsArray.append(Sections(title: title, objects: objects.self.arrayValue.map { $0.string!})) 


         } 

        } 

       } 
      } 
     case .Failure(let error): 
      print(error) 
     } 
    } 

Когда я добавляю в некоторых печатных изданиях (в соответствии с: sectionsArray.append), чтобы проверить, есть ли данные:

print("--") 

print(title) 

print(objects.self.arrayValue.map { $0.string!}) 

print(Sections(title: title, objects: objects.self.arrayValue.map { $0.string!})) 

Я получаю этот результат в консоли :

-

Категория 1

[ "Post1cat1"]

разделов (заголовки: "category1", пункты: [ "Post1cat1"])

-

Категория2

[ "Post1cat2", "Post2cat2"]

Разделы (рубрики: "Категория2", предметы: [ "Post1cat2", "Post2cat2"])

Однако, когда я запускаю приложение - в представлении таблицы все, что отображается, это элементы из массива животных.

enter image description here

Полный View Controller

import Foundation 
import Alamofire 
import SwiftyJSON 

class SectionsData { 

let url = "https://api.myjson.com/bins/3nuvn"; 

var myArray: [String] = [] 


func getSectionsFromData() -> [Sections] { 

    var sectionsArray = [Sections]() 

    let animals = Sections(title: "Animals", objects: ["Cats", "Dogs", "Birds", "Lions"]) 


    Alamofire.request(.GET, url).validate().responseJSON { response in 
     switch response.result { 
     case .Success: 
      if let value = response.result.value { 
       let json = JSON(value) 

       for (_, subJson) in json { 
        for (_, data) in subJson { 
         for (title, objects) in data { 
          sectionsArray.append(Sections(title: title, objects: objects.self.arrayValue.map { $0.string!})) 
         } 

        } 

       } 
      } 
     case .Failure(let error): 
      print(error) 
     } 
    } 

    sectionsArray.append(animals); 


    return sectionsArray 
} 
} 
+0

ваш 'Alamofire 'запрос выполняется асинхронно. – luk2302

+0

ОК, но это не отвечает на вопрос. Как это исправить? – JamesG

+0

После того, как вы добавите данные в свой массив, вызовите 'reloadData()' в виде таблицы. –

ответ

1

код с блоком завершения хотел бы это:

func getSectionsFromData(completion: ([Sections]? -> Void)){ 

     var sectionsArray = [Sections]() 

     let animals = Sections(title: "Animals", objects: ["Cats", "Dogs", "Birds", "Lions"]) 

     Alamofire.request(.GET, url).validate().responseJSON { response in 
      switch response.result { 
      case .Success: 
       if let value = response.result.value { 
        let json = JSON(value) 

        for (_, subJson) in json { 
         for (_, data) in subJson { 
          for (title, objects) in data { 
           sectionsArray.append(Sections(title: title, objects: objects.self.arrayValue.map { $0.string!})) 
          } 

         } 
        } 
       } 
       sectionsArray.append(animals) 
       completion(sectionsArry) 
      case .Failure(let error): 
       print(error) 
       sectionsArray.append(animals) 
       completion(nil) 
      } 
     } 
    } 

При вызове FUNC:

var sections: [Sections] = [] 
SectionsData().getSectionsFromData({ sectionsArray in 
    self.sections = sectionsArray 
    //reload your table with sectionsArray 
}) 
+0

Теперь в файле SectionsTableViewController.Swift в этой строке: разделы var: [Sections] = SectionsData(). GetSectionsFromData() - Я получаю Missing Argument для параметра # 1 в call – JamesG

+0

Я извиняюсь, я очень новичок в программировании быстро. Я высоко ценю вашу помощь. – JamesG

+0

Вам нужно будет где-то объявить свои разделы, а затем вызвать 'SectionsData(). GetSectionsFromData ({data in sections = data})'. Это по-прежнему асинхронный вызов, поэтому вам нужно будет управлять своим кодом, чтобы принять это. – Breek

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