如何在swift中使用线程?
dispatchOnMainThread:^{
NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_queue()));
}];
最佳实践是定义可多次访问的可重用函数。
e、 g.类似AppDelegate的地方。swift作为一项全球职能。
func backgroundThread(_ delay: Double = 0.0, background: (() -> Void)? = nil, completion: (() -> Void)? = nil) {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
background?()
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue()) {
completion?()
}
}
}
注:在Swift 2.0中,替换QOS\u CLASS\u USER\u INITIATED。QOS_CLASS_USER_启动时的上述值。取而代之的是rawValue
A.在后台运行延迟3秒的进程:
backgroundThread(3.0, background: {
// Your background function here
})
B、 要在后台运行进程,然后在前台运行完成:
backgroundThread(background: {
// Your function here to run in the background
},
completion: {
// A function to run in the foreground when the background thread is complete
})
C、 延迟3秒-注意使用不带背景参数的完成参数:
backgroundThread(3.0, completion: {
// Your delayed function here to be run in the foreground
})
Dan Beaulieu在swift5中的回答(自swift 3.0.1起也起作用)。
extension DispatchQueue {
static func background(delay: Double = 0.0, background: (()->Void)? = nil, completion: (() -> Void)? = nil) {
DispatchQueue.global(qos: .background).async {
background?()
if let completion = completion {
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
completion()
})
}
}
}
}
DispatchQueue.background(delay: 3.0, background: {
// do something in background
}, completion: {
// when background job finishes, wait 3 seconds and do something in main thread
})
DispatchQueue.background(background: {
// do something in background
}, completion:{
// when background job finished, do something in main thread
})
DispatchQueue.background(delay: 3.0, completion:{
// do something in main thread after 3 seconds
})
在Swift 3.0中,很多功能都得到了更新。在后台队列中运行的内容如下所示:
DispatchQueue.global(qos: .userInitiated).async {
print("This is run on a background queue")
DispatchQueue.main.async {
print("This is run on the main queue, after the previous code in outer block")
}
}
let qualityOfServiceClass = QOS_CLASS_USER_INITIATED
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
print("This is run on a background queue")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("This is run on the main queue, after the previous code in outer block")
})
})
在Swift 1.1版本中,苹果不支持上述语法,只做了一些修改。传递QOS\u CLASS\u USER\u INITIATED实际上不起作用,而是使用Int(QOS\u CLASS\u USER\u INITIATED.value)。
有关更多信息,请参阅苹果留档
问题内容: 我有一个带有文本的元素。每当我降低不透明度时,我就会降低整个身体的不透明度。有什么办法可以让我变得更黑,而不是其他所有? 问题答案: 只需将此代码添加到您的图像CSS 更新:并非所有浏览器都支持RGBa,因此您应该具有“后备颜色”。该颜色很可能是纯色(完全不透明),例如:。
问题内容: 有没有已知的方法可以使IE中的CSS样式起作用? 问题答案: 有点晚了,但这也可能有用。有一个适用于IE 5.5+的IE过滤器,您可以应用: 但是,这会缩放整个图像以适合分配的区域,因此,如果您使用的是精灵,这可能会引起问题。
我没有使用 CSS3。所以我不能使用或属性。如果不使用这些属性,如何使 透明?它应该是此链接中的文本框示例。此处的文本框背景色是透明的。我想做同样的事情,但不使用上面提到的属性。
问题内容: 在Objective-C中,使用Sprite-Kit,我将在Objective-C中 成功 使用类似以下代码的内容来展示新场景 在尝试将我的简单游戏移植到Swift时,到目前为止,我已经完成了这项工作… 但是我不知道要写什么代码才能真正过渡到另一个场景。问题: 有人可以提供在Swift中使用SKTransition的示例吗? 假设您将使用Objective-C,通常是否会创建另一个“文
我有一个swift文件,有几叠,其中上面的文字行为怪异,我想不明白为什么“控制器”的背景颜色——文字一直延伸到屏幕的末端,我该如何调整背景的高度?
问题内容: 我一直在尝试产生基本的径向渐变背景,但没有成功。我设法获得了线性渐变,如下面的代码所示,但是我不知道如何使用不同的颜色使其呈放射状- 如下图所示。任何帮助将不胜感激。:) 问题答案: 看看我的RadialGradientLayer的实现,可以随时对其进行修改 就我而言,我只需要使用两种颜色,如果需要更多颜色,则需要修改中声明的数组。同样,在从此类创建对象之后,请不要忘记调用它,否则它将