Passing an argument to dispatch_async

2019-03-02 13:38发布

问题:

I'm new to Swift and looking at how the dispatch_async function works. The API doc shows dispatch_async having two parameters. However, I'm able to pass in one argument and it's okay.

dispatch_async(dispatch_get_main_queue()) { 

}

How come I don't need to pass in two arguments?

Thank you,

API Doc:

回答1:

It is a trailing closure syntax

func someFunctionThatTakesAClosure(closure: () -> ()) {
    // function body goes here
}

// here's how you call this function without using a trailing closure:

someFunctionThatTakesAClosure({
    // closure's body goes here
})

// here's how you call this function with a trailing closure instead:

someFunctionThatTakesAClosure() {
    // trailing closure's body goes here
}

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html



回答2:

This is how the dispatch_async looks like..

dispatch_async(dispatch_get_main_queue(), ^{

});

this part

^{

}

is the second parameter to your function, which is an anonymous code block used for callBack implementation.