Ich bin ziemlich neu in iOS-Programmierung und ich habe Probleme bei der Verwendung von Variablen aus einer Abschlussanweisung. Ich habe den folgenden Code eingefügt, ich bin mir nicht sicher warum, wenn ich die Abschlussvariablen in einem Array DataType speichern, scheint nur leere Zeichenfolgen zurückgeben.Beim Abrufen von Daten aus der Vervollständigung Statement-Variablen leer
Hinweis: Die Fertigstellung Daten werden in der loadSampleStockData Funktion aufgerufen, und es wird später nehme an Zellen in func Tableview werden zurückgegeben (Tableview: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Vielen Dank für jede Hilfe, die kann vorgesehen werden!
import UIKit
class dashboardViewController: DefaultViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var balanceLabel: UILabel!
var stocks = [stockData]()
let stock = stockinfo()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
loadSampleStockData()
user.newUser() // Move to login function when login and registration is implemented
//Sets the Balance Label on Dashboard
balanceLabel.text = "$" + String(format: "%.2f", user.getBalance())
}
func loadSampleStockData() {
var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
stock.getInfo("FB") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{
stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB")
stocks.append(stock1)
})
}
stock.getInfo("MSFT") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{
stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT")
stocks.append(stock2)
})
}
stock.getInfo("APPL") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{
stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL")
stocks.append(stock3)
})
}
print(stocks.count)
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stocks.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "stockViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell
let stock = stocks[indexPath.row]
cell.stockName.text = stock.name
cell.stockPercentage.text = stock.percentageChange
cell.stockDollarChange.text = stock.askPrice
cell.stockTicker.text = stock.stockTicker
return cell
}
}
Danke für die Antwort, könnte eine ignorante Frage sein, aber wenn ich Aktien innerhalb der Completion-Handler initiieren würde ich nicht in der Lage sein, sie in einem anderen Abschluss-Handler und damit die anderen Funktionen wegen der variablen Bereich aufrufen? Da ich vielleicht ein Missverständnis habe, würde es Ihnen etwas ausmachen, ein Code-Snippet zur Verfügung zu stellen? Vielen Dank für Ihre Hilfe. –
Sie benötigen einen gemeinsamen Status, z. B. die Instanzvariable, die Sie hier haben. Jeder Abschluss-Handler wird asynchron zum Array hinzugefügt, und der Haupt-Thread wird warten, bis alles fertig ist. – Alexander
Vielen Dank für Ihre Geduld und die Zeit, um mir dabei zu helfen. Ich habe versucht, zu den Daten zu "Beständen" im Beendigungshandler hinzuzufügen. Wie würde ich "Bestände" in die Completion Handler geben? Ich habe meine Änderungen oben vorgenommen, gehe ich falsch vor und wenn ja, würde es Ihnen etwas ausmachen, mir ein Code-Snippet zur Verfügung zu stellen. Vielen Dank für Ihre Hilfe Ich werde weiterhin google und lesen Sie die Dokumentation –