我对Swift很新。
(a)我已经能够使用表视图将数组中的数字加载到表中。
(b)我已经能够从网上读取一个文本文件并将其加载到一个数组中。
但是,我希望(b)中的数组(从Web文本文件创建)在(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
}
答案 0 :(得分:1)
所以你的问题是你在请求的闭包内声明数组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)))
}
}
}
}