With Swift 2, it is now possible to do this fully natively in Swift. C function pointers are imported into Swift as closures. You can pass any Swift closure or function with matching parameters to code that expects a C function pointer – with one massive caveat: unlike closures, C function pointers don’t have the concept of capturing state. As a result, the compiler will only allow Swift closures that do not capture any outside state to be bridged to a C function pointer. Swift uses the new @convention(c) notation to indicate this calling convention.