IONotificationPortCreate函数调用生成编译器错误

时间:2014-12-17 07:59:10

标签: macos swift iokit

我在IOKit中遇到IONotificationCreatePort函数的问题:

var NotificationPort = IONotificationPortCreate(MasterPort)
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
在第二行的函数调用中使用NotificationPort时,

会出现以下编译器错误

  

'Unmanaged IONotificationPort'与...不同   'IONotificationPort'

如果我根据使用Swift with Cocoa和Objective-C文档中的信息使用以下代码,它会编译但会生成运行时错误

var NotificationPort = IONotificationPortCreate(MasterPort).takeRetainedValue()
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
  

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xwhatever)

所以我认为我发现了运行时错误,IONotificationPort对象没有takeRetainedValue方法

我认为问题的症结在于IONotificationPortCreate函数创建了一个IONotificationPort对象并返回对它的引用。

我已经遍布整个地方,有很多关于如何将引用传递给Swift函数调用的信息,但我无处可寻找如何将引用作为返回值处理。

Swift可以通过引用调用对象吗?

或者我离开这里了吗????

这是我想要转换为swift的客观C代码:

    _notificationPort = IONotificationPortCreate(masterPort);
    IONotificationPortSetDispatchQueue(_notificationPort, _controllerQueue);

以下是我的swift文件中的完整代码段:

    //Get IOKit Master Port

    var MasterPort: mach_port_t = 0
    let BootstrapPort: mach_port_t = 0
    var MasterPortReturnCode: kern_return_t = 0

    MasterPortReturnCode = IOMasterPort(BootstrapPort, &MasterPort)
    println("Master port returned as \(MasterPort) with return code of \(MasterPortReturnCode)")

    //Set up notification port and send queue

    let DispatchQueue = dispatch_queue_create("com.apparata.AVB_Browser", DISPATCH_QUEUE_SERIAL)
    var NotificationPort = IONotificationPortCreate(MasterPort)
    IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)

0 个答案:

没有答案