gpt4 book ai didi

swift Mac 应用程序 : Speeding up execution with dispatch queue

转载 作者:行者123 更新时间:2023-11-30 12:05:13 25 4
gpt4 key购买 nike

我是一个 Swift 新手,我正在开发一个 Swift Mac 应用程序作为演示项目。该应用程序将股票代码存储在 sqlite 表中,获取股票价格,计算值(value),然后最终在表中显示结果看法。我正在寻找在获取数据以填充 TableView 时提高执行速度的方法。所以我使用了 Dispatch Queue,如下所示。问题是股票价格和股票值(value)列(在异步闭包中计算)始终为空。我究竟做错了什么?函数 getStocksData 返回一个 NSMutableArray,它是我的 TableView 的数据源

func getStocksData() -> NSMutableArray {
sharedInstance.database!.open()
let resultSet: FMResultSet! = sharedInstance.database!.executeQuery("select stock_id,symbol,company,qty from stocks ", withArgumentsIn: [])

let stocksDBRowsArray : NSMutableArray = NSMutableArray()
if (resultSet != nil) {
while resultSet.next() {
let stockInfo : StockInfo = StockInfo()
stockInfo.StockID = resultSet.string(forColumn: "stock_id")!
stockInfo.Symbol = resultSet.string(forColumn: "symbol")!
stockInfo.StockCompany = resultSet.string(forColumn: "company")!
stockInfo.Qty = resultSet.string(forColumn: "qty")!
//create queue with unique label to fetch stock price
let queue=DispatchQueue(label:stockInfo.Symbol)
queue.async {

//code to fetch stock price goes here
.....

stockInfo.StockPrice=stockPrice
stockInfo.StockValue=stockPrice*stockInfo.Qty



}
stocksDBRowsArray.add(stockInfo)
}
}
sharedInstance.database!.close()
return stocksDBRowsArray
}

最佳答案

What am i doing wrong?

当 getStocksData() 方法返回时,StockInfo 值可能会也可能尚未填充所获取的值。 StockInfo 值最终在某个未定义时间点在未定义应用程序线程中被填充。

这就是所提供的代码片段的作用。当然这不是你想要的,但是你想要的也不是很清楚。

Swift 的 Dispatch 库的文档非常简洁,并不能帮助你理解正在发生的事情。相反,我建议您研究 dispatch_async 的文档,它相当于 Swift DispatchQueue.async 的 C 版本。它有更多详细信息,您将阅读这个关键句子:

Calls to this function always return immediately after the block has been submitted and never wait for the block to be invoked.

当缺少 Swift 文档时,通常会毫不犹豫地切换到 Objective-C 文档。掌握一些 Swift 技术有时需要一些小小的不便。您将在那里学到大量信息。

关于 swift Mac 应用程序 : Speeding up execution with dispatch queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46751719/

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