gpt4 book ai didi

ios - viewdidload 操作顺序中的网页内容数组很奇怪

转载 作者:行者123 更新时间:2023-11-30 13:42:38 26 4
gpt4 key购买 nike

我正在开发一款新应用程序,该应用程序主要用于组织网络内容中的信息。它将是一款用于监控道琼斯指数股息 yield 的金融应用程序。为此,需要执行几个步骤,但我现在正在执行第一步。我想选取道琼斯指数中的 30 家公司,查找它们当前的 yield ,然后根据该数字对它们进行排名。现在我正在更新一个数组,以提供所有 30 家公司的 yield (即 [2.7、3.6、5.5、1.3 等...])。这是我当前的代码,我的问题如下:

let dowDic = ["MMM", "AXP", "AAPL", "BA", "CAT", "CVX", "CSCO", "KO", "DIS", "DD", "XOM", "GE", "GS", "HD", "IBM", "INTC", "JNJ", "JPM", "MCD", "MRK", "MSFT", "NKE", "PFE", "PG", "TRV", "UTX", "UNH", "VZ", "V", "WMT"]

var dowYield = [1.11, 2.11, 3.11, 4.11, 5.11, 6.11, 7.11, 8.11, 9.11, 1.11, 1.11, 2.11, 3.11, 4.11, 5.11, 6.11, 7.11, 8.11, 9.11, 1.11, 1.11, 2.11, 3.11, 4.11, 5.11, 6.11, 7.11, 8.11, 9.11, 1.11]

var counter = 0

@IBOutlet var label: UILabel!


@IBAction func refresh(sender: AnyObject) {

print(dowYield)

}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.





print(dowDic.indexOf("WMT"))



for x in dowDic {

print(x)

let url = NSURL(string:"http://finance.yahoo.com/q?s=\(x)")!

print(url)

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

//will happen after complete

if let urlContent = data {

let webContent = NSString(data: urlContent, encoding: NSUTF8StringEncoding)

let websiteArray = webContent?.componentsSeparatedByString("<th scope=\"row\" width=\"48%\">Div &amp; Yield:</th><td class=\"yfnc_tabledata1\">")

if websiteArray!.count > 0 {

let nextWebsiteArray = websiteArray![1].componentsSeparatedByString(" </td></tr>")

if nextWebsiteArray.count > 0 {

let websiteSum = nextWebsiteArray[0].componentsSeparatedByString(" (")

if websiteSum.count > 0 {

let finalYield = websiteSum[1].componentsSeparatedByString("%")

let WTF = Double(finalYield[0])

print(finalYield[0])



self.dowYield[self.counter] = WTF!


self.counter++


}


}

}

}




}






task.resume()



}



print("flag")

print(dowYield)




}

我希望应用程序更新数组“dowYield”并稍后在 viewDidLoad 中访问它,但我只能使用按钮获取更新的打印输出。目前,打印屏幕首先打印出股票代码和网址,全部打印出来。然后它跳到代码底部并打印“flag”文本,然后打印原始的、未经编辑的“dowYield”数组。然后它一张一张地打印出新的产量。关于这里的操作顺序以及如何访问 viewDidLoad 中更新的数组以便我想使用这些新信息进行的 future 操作有什么见解吗?谢谢你!

最佳答案

这就是异步代码的工作原理。您启动一个运行的异步作业,它会自行继续运行,直到一段时间后完成。

将此视为 dispatch 某人为您办事。当你让他们去办事的那一刻,事情还没有完成,你也不知道他们到底需要多长时间才能完成。所以你就去做其他事情,等待他们回来告诉你工作已经完成。

这就是数据任务中完成 block 的用途。它是保存供以后使用的代码,并在数据任务运行完成后执行。您可以确定在 viewDidLoad 退出之前不会调用该代码。

您想要做的是在完成 block 内添加一个调用,使用 dispatch_async(dispatch_get_main_queue()) 在主线程上更新 UI数据已下载。

关于ios - viewdidload 操作顺序中的网页内容数组很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com