2016-08-24 3 views
0

Я довольно новый для Swift.Доступ к массиву внешних функций в Swift

(a) Я смог использовать представление таблицы для загрузки чисел из массива в таблицу.

(b) Я смог прочитать текстовый файл из Интернета и загрузить его в массив.

Однако, я хочу, чтобы массив в (b), созданный из текстового веб-файла, просматривался в (a), который представляет собой представление таблицы.

В моем коде отсутствует связь между разделами (a) и (b).

Не могли бы вы помочь?

//MAIN CLASS 

import UIKit 

//CHUNK 0 
class ViewController: UITableViewController { 

var candies = [Candy]() 


//CHUNK 1 
override func viewDidLoad() { 

super.viewDidLoad() 

// CHUNK 1.2 
let request = NSMutableURLRequest(URL: NSURL(string: "http://www.saifahmad.com/A.txt")!) 
httpGet(request){ 
      (data, error) -> Void in 
      if error != nil { 
       print(error) 
      } else { 
       //print(data)//PRINTING ALL DATA TO CONSOLE 
       let delimiter = "\t" // Read a tab-delimited text file 

       // self.items = [] 
       let lines:[String] = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as [String] 

       var ar = [Double]() 

       for line in lines { 
        var values:[String] = [] 
        if line != "" { 
         values = line.componentsSeparatedByString(delimiter) 
         // Put the values into the tuple and add it to the items array 
         let str = (values[1])//CHOOSE THE COLUMN TO PRINT (0, 1, 2) 
         // Convert string to double 
         let db = NSNumberFormatter().numberFromString(str)?.doubleValue 
         ar.append(db!) 
        } 
       } 
       dump(ar) // THIS ARRAY 'AR' PRINTS OK HERE BUT CANNOT BE ACCESSED IN CHUNK 1.3 
      } 
    } 
    // CHUNK 1.2 


    //CHUNK 1.3 
    // CANNOT ACCESS ARRAY 'AR' OF CHUNK 1.2 HERE 
    let ar2: [Double] = [0, 0.004, 0.008, 0.012, 0.016, 0.02, 0.024, 0.028, 0.032, 0.036, 0.04] 
    for nn in ar2 { 
     self.candies.append(Candy(name: String(format:"%.4f", nn))) 
    } 
    //CHUNK 1.3 


} 
//CHUNK 1 


//CHUNK 2 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
//CHUNK 2 


//CHUNK 3 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.candies.count 
} 
//CHUNK 3 


//CHUNK 4 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 
    var candy : Candy 
    candy = candies[indexPath.row] 
    cell.textLabel?.text = candy.name 
    return cell 
} 
//CHUNK 4 


//CHUNK 5 
func httpGet(request: NSURLRequest!, callback: (String, String?) -> Void) { 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(request){ 
     (data, response, error) -> Void in 
     if error != nil { 
      callback("", error!.localizedDescription) 
     } else { 
      let result = NSString(data: data!, encoding: 
       NSASCIIStringEncoding)! 
      callback(result as String, nil) 
     } 
    } 
    task.resume() 
} 
//CHUNK 5 


} 
//CHUNK 0 



//CANDY CLASS 
import Foundation 

struct Candy { 
let name : String 
    } 

This is the screenshot of the tableview which loads fine from the local array. However, I want the table to load from the Web text file!

ответ

0

Итак, ваша проблема в том, что вы объявляете массив ар внутри закрытия для запроса. Так оно существует только в закрытии. У вас есть два варианта: создать массив вне viewDidLoad и установить его, как только у вас будет полный массив, а затем используйте didSet для установки конфет или вы можете сделать все настройки для конфет внутри закрытия (см. Ниже). Я бы поместил didSet с конфетами в любом случае, чтобы перезагрузить tableView.

var candies = [Candy]() { 
    didSet { 
     tableView.reloadData() 
    } 
} 

override func viewDidLoad() { 

    super.viewDidLoad() 

    // CHUNK 1.2 
    let request = NSMutableURLRequest(URL: NSURL(string: "http://www.saifahmad.com/A.txt")!) 

    httpGet(request){ (data, error) -> Void in 

     if error != nil { 

      print(error) 

     } else { 

      let delimiter = "\t" // Read a tab-delimited text file 

      let lines:[String] = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as [String] 

      var ar = [Double]() 

      for line in lines { 

       var values:[String] = [] 

       if line != "" { 

        values = line.componentsSeparatedByString(delimiter) 
        // Put the values into the tuple and add it to the items array 

        let str = (values[1])//CHOOSE THE COLUMN TO PRINT (0, 1, 2) 

        // Convert string to double 

        let db = NSNumberFormatter().numberFromString(str)?.doubleValue 

        ar.append(db!) 

       } 

      } 


      for nn in ar { 

       self.candies.append(Candy(name: String(format:"%.4f", nn))) 

      } 

     } 

    } 

} 
+0

Большое спасибо Оливеру! – Saif

+0

Нет проблем :) если он работает, отметьте его как правильный ответ для следующего человека. –

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