在斯威夫特的GCD后派人去嗎?我經歷了iBook來自蘋果,卻找不到它的任何定義:有人能解釋一下…的結構嗎?dispatch_after?dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
4 回答
侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
dispatch_after
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)}delay(0.4) {
// do stuff}更新SWIFT 3,Xcode 8種子6
func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay DispatchQueue.main.asyncAfter(deadline: when, execute: closure)}
呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
let delay = 4.5 * Double(NSEC_PER_SEC)let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))dispatch_after(time, dispatch_get_main_queue(), block)
=SWIFT 3的更新=
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
// ...}
千巷貓影
TA貢獻1829條經驗 獲得超7個贊
typealias dispatch_cancelable_closure = (cancel : Bool) -> Voidfunc delay(time:NSTimeInterval, closure:()->Void) -> dispatch_cancelable_closure? {
func dispatch_later(clsr:()->Void) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(time * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), clsr)
}
var closure:dispatch_block_t? = closure var cancelableClosure:dispatch_cancelable_closure?
let delayedClosure:dispatch_cancelable_closure = { cancel in
if closure != nil {
if (cancel == false) {
dispatch_async(dispatch_get_main_queue(), closure!);
}
}
closure = nil
cancelableClosure = nil
}
cancelableClosure = delayedClosure
dispatch_later {
if let delayedClosure = cancelableClosure {
delayedClosure(cancel: false)
}
}
return cancelableClosure;}func cancel_delay(closure:dispatch_cancelable_closure?) {
if closure != nil {
closure!(cancel: true)
}}let retVal = delay(2.0) {
println("Later")}delay(1.0) {
cancel_delay(retVal)}- 4 回答
- 0 關注
- 555 瀏覽
添加回答
舉報
0/150
提交
取消
