2016-08-24 59 views
0

我对Swift很新颖。 (a)我已经可以使用表格视图从数组中加载数字到表格中。在Swift中访问数组的外部函数

(b)我已经能够从网上读取文本文件并将其加载到数组中。

但是,我希望在(a)中查看(b)中从web文本文件创建的数组,这是表视图。

在我的代码中,(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

所以你的问题是,你声明数组AR你封的要求内。所以它只存在于封闭中。你有两个选择:在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

没问题:)如果有效,请将其标记为下一个要查看的人的正确答案。 –