InvokeFunction.h
#include <stdio.h>
int invoke_fun(int (*f)(void));
#endif /* defined(__LiveCyalume__InvokeFunction__) */
InvokeFunction.c
#include "InvokeFunction.h"
int invoke_fun(int (*f)(void)) {
return f();
}
{ProjectName}-Bridging-Header.h
int invoke_fun(int (*f)(void));
ViewController.swift
let handle = dlopen("/usr/lib/libc.dylib", RTLD_NOW)
let sym : UnsafeMutablePointer<Void> = dlsym(handle, "random")
let rawPointer = UnsafeMutablePointer<() -> Int32>(sym)
let opaquePtr : COpaquePointer = COpaquePointer(rawPointer)
let cFunPointer = CFunctionPointer<() -> Int32>(opaquePtr)
println(invoke_fun(cFunPointer))
ただし、RetrunタイプがObjectの場合には使えない。