У меня проблема с функцией IONotificationCreatePort в IOKit:
var NotificationPort = IONotificationPortCreate(MasterPort)
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
дает следующую ошибку компилятора, когда NotificationPort используется в вызове функции во второй строке
«Неуправляемый IONotificationPort» не идентичен «IONotificationPort».
если я использую следующий код на основе информации в документе «Использование Swift с Cocoa и Objective-C», он компилируется, но генерирует ошибку времени выполнения
var NotificationPort = IONotificationPortCreate(MasterPort).takeRetainedValue()
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0xнезависимо)
Итак, я думаю, что понял ошибку времени выполнения, объект IONotificationPort не имеет метода takeRetainedValue
Суть проблемы, как мне видится, в том, что функция IONotificationPortCreate создает объект IONotificationPort и возвращает ссылку на него.
Я просмотрел повсюду, и есть много информации о способах передачи ссылок в вызов функции из Swift, но я нигде не могу найти, как обращаться со ссылками в качестве возвращаемого значения.
Может ли Swift вызывать объект по ссылке?
Или я не в теме????
Вот объективный код C, который я пытаюсь преобразовать в быстрый:
_notificationPort = IONotificationPortCreate(masterPort);
IONotificationPortSetDispatchQueue(_notificationPort, _controllerQueue);
Вот полный фрагмент кода из моего быстрого файла:
//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)
nil
? - person Logan   schedule 17.12.2014