Быстрое небезопасное взаимодействие с указателем - PullRequest
0 голосов
/ 03 мая 2020

Я играю с портированием DD C -CI tool на Swift и застрял на

IOI2CConnectRef  connect;

kr = IOFBCopyI2CInterfaceForBus(framebuffer, bus, &interface);
if( kIOReturnSuccess != kr)
    continue;

kr = IOI2CInterfaceOpen( interface, kNilOptions, &connect );

IOObjectRelease(interface);
assert( kIOReturnSuccess == kr );
if( kIOReturnSuccess != kr)
    continue;

У меня сейчас

var interface = io_service_t()

kr = IOFBCopyI2CInterfaceForBus(framebuffer, bus, &interface)
if kr != kIOReturnSuccess {
    continue
}

var connection: IOI2CConnectRef?
kr = IOI2CInterfaceOpen(interface, IOOptionBits.zero, &connection)
if kr == kIOReturnSuccess {
    // IOI2CInterfaceClose(connection, IOOptionBits.zero)
    break
}

Который проверяется типом, но, похоже, не работает, connection здесь всегда nil. Я не совсем уверен, как обрабатывать указатель / инициализацию в Swift. Похоже, что это работает в случае var interface = io_service_t(), но я думаю, что это хитрее, поскольку connection обнуляется в C, но в Swift это Optional, который может иметь другую структуру памяти и плохо взаимодействовать.

Все помогает ценится. Спасибо!

...