Swift 3 中的 GLFW 回调签名
GLFW callback signature in Swift 3
我正在尝试在 Swift 3 中设置一个简单的 GLFW 应用程序。目前我无法尝试设置回调函数。
func setupGLFW() {
...
glfwSetErrorCallback(errorCallback)
...
}
func errorCallback(error: Int32, description: UnsafePointer<Int8>) {
...
}
这在 Swift 2 中有效,但现在我收到此错误:
cannot convert value of type '(Int32, UnsafePointer) -> ()' to expected argument type 'GLFWerrorfun!'
在查阅文档中的Interacting with C APIs部分后,我也尝试了这个签名:
func errorCallback(error: CInt, description: UnsafePointer<CChar>) {
...
}
这会导致同样的错误。
GLFWerrorfun
的 C 签名是:
typedef void(* GLFWerrorfun) (int, const char *)
试试:
func errorCallback(error: Int32, description: UnsafePointer<Int8>?) {
(请不要错过UnsafePointer<Int8>
后面的?
。)
在Swift3中,nullable指针被导入为Optional指针,所以你需要?
。
您可以在调用 glfwSetErrorCallback
:
的地方内联回调
glfwSetErrorCallback { (error, description) in
//
}
或者,使用存储在变量中的闭包:
let callback: GLFWerrorfun = { (error, description) in
//
}
glfwSetErrorCallback(callback)
您可以通过 Option + 左键单击符号来查看此 typedef 是如何桥接到 Swift 的:
在这种情况下,我没有实际的 GLFW headers,所以我只是将声明放在桥接 Header 中。您生成的界面可能会显示更多信息。
我正在尝试在 Swift 3 中设置一个简单的 GLFW 应用程序。目前我无法尝试设置回调函数。
func setupGLFW() {
...
glfwSetErrorCallback(errorCallback)
...
}
func errorCallback(error: Int32, description: UnsafePointer<Int8>) {
...
}
这在 Swift 2 中有效,但现在我收到此错误:
cannot convert value of type '(Int32, UnsafePointer) -> ()' to expected argument type 'GLFWerrorfun!'
在查阅文档中的Interacting with C APIs部分后,我也尝试了这个签名:
func errorCallback(error: CInt, description: UnsafePointer<CChar>) {
...
}
这会导致同样的错误。
GLFWerrorfun
的 C 签名是:
typedef void(* GLFWerrorfun) (int, const char *)
试试:
func errorCallback(error: Int32, description: UnsafePointer<Int8>?) {
(请不要错过UnsafePointer<Int8>
后面的?
。)
在Swift3中,nullable指针被导入为Optional指针,所以你需要?
。
您可以在调用 glfwSetErrorCallback
:
glfwSetErrorCallback { (error, description) in
//
}
或者,使用存储在变量中的闭包:
let callback: GLFWerrorfun = { (error, description) in
//
}
glfwSetErrorCallback(callback)
您可以通过 Option + 左键单击符号来查看此 typedef 是如何桥接到 Swift 的:
在这种情况下,我没有实际的 GLFW headers,所以我只是将声明放在桥接 Header 中。您生成的界面可能会显示更多信息。