Mat*_*att 15 xcode multithreading swift xcode6
我正在使用Swift开发一个使用Xcode 6的软件.当我按下一个按钮时,我的代码从网上获取一些信息并将它们写在我的NSWindow上.
想象一下这样的事情:
@IBAction func buttonPressed(sender: AnyObject)
{
for page in listOfPages //Number of pages is 40.
{
var label: NSTextField = NSTextField();
label.stringValue = getInformetionsFromPage(page)
/*
some code to add label in the window here
*/
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,一旦我点击按钮,我看到结果列表需要一段时间,在应用程序冻结的主要时间.那是因为我没有使用任何线程来处理这个问题.我怎样才能实现线程以查看循环的每一步都更新的每个标签?我是线程和Swift的新手,所以我需要一些帮助!
感谢你们.
Fan*_*ing 35
Swift 3.0版
DispatchQueue.main.async() {
// your UI update code
}
Run Code Online (Sandbox Code Playgroud)
发表这个是因为XCode无法从swift 2.0版本中建议正确的语法
mus*_*afa 13
有GCD.这是一个基本用法:
for page in listOfPages {
var label = NSTextField()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let result = getInformationFromPage(page)
dispatch_async(dispatch_get_main_queue()) {
label.stringValue = result
}
}
}
Run Code Online (Sandbox Code Playgroud)
dispatch_async函数异步运行给定队列上的代码块.在第一次dispatch_async调用中,我们调度代码以在后台队列上运行.我们得到后,result我们更新主队列上的标签result
| 归档时间: |
|
| 查看次数: |
23788 次 |
| 最近记录: |