title: Populate UITableview with Array from Rest API in Swift
body: <p>In my mainTableView Controller, I can print the API result in the console but I have no idea how I can set these to be visible in the cells of my tableview</p>
  
  <pre><code>import UIKit
  //from: https://github.com/Ramotion/folding-cell
  class MainTableViewController: UITableViewController {
  
  let kCloseCellHeight: CGFloat = 179
  let kOpenCellHeight: CGFloat = 488
  
  let kRowsCount = 100
  
  var cellHeights = [CGFloat]()
  var restApi = RestApiManager()
  var items: NSDictionary = [:]
  
  
  override func viewDidLoad() {
      super.viewDidLoad()
  
      restApi.makeCall() { responseObject, error in
          // use responseObject and error here
          //  self.json = JSON(responseObject!)
  
          print("print the json data from api ")
          self.items = NSDictionary(dictionary: responseObject!)
          self.tableView.reloadData()
          print(responseObject!.count)
         // print(self.items)
          let resultList = self.items["result"] as! [[String: 
   AnyObject]]
          print(resultList[5])
      }
  
      createCellHeightsArray()
      self.tableView.backgroundColor = UIColor(patternImage: 
    UIImage(named: "background")!)
  
  
  }
  
  // MARK: configure
  func createCellHeightsArray() {
      for _ in 0...kRowsCount {
          cellHeights.append(kCloseCellHeight)
      }
  }
  
  // MARK: - Table view data source
  
  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
      return 10
  }
  
  override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
  
      guard case let cell as DemoCell = cell else {
          return
      }
  
      cell.backgroundColor = UIColor.clearColor()
  
      if cellHeights[indexPath.row] == kCloseCellHeight {
          cell.selectedAnimation(false, animated: false, completion:nil)
      } else {
          cell.selectedAnimation(true, animated: false, completion: nil)
      }
  
      cell.number = indexPath.row
  }
  
  
  // with as! the cell is set to the custom cell class: DemoCell
  // afterwards all data can be loaded in this method
  override func tableView(tableView: UITableView, cellForRowAtIndexPath    
  indexPath: NSIndexPath) -&gt; UITableViewCell {
      let cell = 
  tableView.dequeueReusableCellWithIdentifier("FoldingCell", 
  forIndexPath: indexPath) as! DemoCell
  
  //TODO: set all custom cell properties here (retrieve JSON and set in 
  cell), use indexPath.row as arraypointer
  
  //    let resultList = self.items["result"] as! [[String: AnyObject]]
   //   let itemForThisRow = resultList[indexPath.row]
  //  cell.schoolIntroText.text = itemForThisRow["name"] as! String
  
      cell.schoolIntroText.text = "We from xx University..."
      return cell
  }
  
  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -&gt; CGFloat {
      return cellHeights[indexPath.row]
  }
  
  // MARK: Table vie delegate
  
  override func tableView(tableView: UITableView, 
  didSelectRowAtIndexPath indexPath: NSIndexPath) {
  
      let cell = tableView.cellForRowAtIndexPath(indexPath) as! 
  FoldingCell
  
      if cell.isAnimating() {
          return
      }
  
      var duration = 0.0
      if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
          cellHeights[indexPath.row] = kOpenCellHeight
          cell.selectedAnimation(true, animated: true, completion: nil)
          duration = 0.5
      } else {// close cell
          cellHeights[indexPath.row] = kCloseCellHeight
          cell.selectedAnimation(false, animated: true, completion: 
  nil)
          duration = 0.8
      }
  
      UIView.animateWithDuration(duration, delay: 0, options: 
  .CurveEaseOut, animations: { () -&gt; Void in
          tableView.beginUpdates()
          tableView.endUpdates()
          }, completion: nil)
  
  
  }    
  }
  </code></pre>
  
  <p>I get this result in JSON which is correct</p>
  
  <pre><code>{
   result =     (
              {
          city = Perth;
          "cou_id" = AU;
          environment = R;
          image = "-";
          name = "Phoenix English";
          rating = 0;
          "sco_id" = 2;
          "sco_type" = LS;
      },
              {
          city = "Perth ";
          "cou_id" = AU;
          environment = L;
          image = "-";
          name = "Milner college";
          rating = 0;
          "sco_id" = 3;
          "sco_type" = LS;
      },
  </code></pre>
  
  <p>what do I have to do to set these values and set them here?</p>
  
  <pre><code>override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCell {
      let cell = tableView.dequeueReusableCellWithIdentifier("FoldingCell", forIndexPath: indexPath) as! DemoCell
      //TODO: set all custom cell properties here (retrieve JSON and set in cell), use indexPath.row as arraypointer
  
      cell.schoolIntroText.text = "We from xx University..."
      return cell
  }
  </code></pre>
  
  <p>I somehow dont figure out how to construct an array from this JSON output and how to access these fields which seem to be nested in many dimensions,
  as a noob, thx for any inputs.</p>
  
  <p>Addition from class restApi:</p>
  
  <pre><code>// working method for calling api
  func makeCall(completionHandler: (NSDictionary?, NSError?) -&gt; ()) {
  
      Alamofire.request(
          .GET,
          baseURL+schools+nonAcademicParameter,
          headers: accessToken
          )
          .responseJSON { response in
              switch response.result {
              case .Success(let value):
                  completionHandler(value as? NSDictionary, nil)
              case .Failure(let error):
                  completionHandler(nil, error)
              }
      }
  }
  </code></pre>