Swift 2 @convention使用错误

时间:2015-09-23 09:56:09

标签: swift swift2 convention

我遇到Swift 2的问题,我无法转换这部分代码:

let intTran = UnsafeMutablePointer<Int>(bitPattern: -1)
let tranPointer = COpaquePointer(intTran)
let transient = CFunctionPointer<((UnsafeMutablePointer<()>) -> Void)>(tranPointer)

我收到此错误:

  

&#39; CFunctionPointer&#39;不可用:使用函数类型&#39; @convention(c)(T) - &gt; U&#39;

我试图以这种方式改变它:

let intTran = UnsafeMutablePointer<Int>(bitPattern: -1)
let tranPointer = COpaquePointer(intTran)
typealias transient2 = @convention(c) (UnsafeMutablePointer<()>) -> Void

但我无法使用transient2而且我不确定原因。

比你

1 个答案:

答案 0 :(得分:0)

我一直在Swift游乐场里玩你的代码并注意到这段代码(你替换到原来的代码)由于bitPattern设置为-1而失败(注意我已经得到了一个运行时异常 - 不是编译器错误)。当我用适当的东西替换它时(例如,使用1,因为bitPattern必须代表虚拟地址空间内的有效地址,并且暗示必须是非负整数)。我设法使用以下代码完成并运行:

import Foundation

let intTran = UnsafeMutablePointer<Int>(bitPattern: 1)
let tranPointer = COpaquePointer(intTran)

typealias transient2 = @convention(c) (UnsafeMutablePointer<()>) -> Void

let abc: transient2? = nil
祝你好运,希望这能解决你的问题。