Поиск последовательных портов с помощью IOKit - Swift

Я пытаюсь понять IOKit и как он позволяет мне получить доступ к последовательным портам в программе Swift.

Класс, которым я сейчас манипулирую, выглядит следующим образом:

import Foundation

import Cocoa

import IOKit.serial.IOSerialKeys



class Serial {

    init() {
    }

    @IBOutlet var serialListPullDown : NSPopUpButton!

    func refreshSerialList(defaultprompt: String) {


        // remove everything from the pull down list
        serialListPullDown?.removeAllItems()

        // ask for all the serial ports
        IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching(kIOSerialBSDServiceValue), io_iterator_t)

    }
}

Исходя из прочитанного, я думаю, что правильно настроил IOServiceMatchingServices, но получаю несколько ошибок, таких как "Ожидаемое имя члена или вызов конструктора после имени типа" и "o_iterator_t.Type" не конвертируется в "UnsafeMutualPointer"

Что это значит?

1 ответ

Решение

Там происходит несколько разных проблем - давайте сначала разберем ваш импорт. Похоже, вам нужны эти два:

import IOKit
import IOKit.serial

Для параметров будет легче увидеть, с чем мы работаем, если мы определим их как локальные переменные, например:

// this one's easy, just grabbing a constant from IOKit.serial
let masterPort: mach_port_t = kIOMasterPortDefault
// here we get back an Unmanaged<CFMutableDictionary> and need to convert it to
// a CFDictionary using takeRetainedValue()
let classesToMatch: CFDictionary = IOServiceMatching(kIOSerialBSDServiceValue).takeRetainedValue()
// the iterator that will contain the results of IOServiceGetMatchingServices
var matchingServices: io_iterator_t = 0

И, наконец, вы вызываете метод:

// note that the last parameter is an UnsafeMutablePointer<io_iterator_t>
// so we need to prefix matchingServices with an ampersand (&)
let kernResult = IOServiceGetMatchingServices(masterPort, classesToMatch, &matchingServices)
if kernResult == KERN_SUCCESS {
    // success
} else {
    // error
}

Это похоже на то, с чем Swift может справиться прямо сейчас - обязательно прочитайте эти две страницы, прежде чем идти дальше:

Наконец, убедитесь, что вы можете войти в преобразованные объявления Swift для IOKit фреймворк. Есть много полезных комментариев, и вы сможете увидеть, какие параметры и возвращаемые значения являются неуправляемыми или указателями (так как я не думаю, что официальная документация этого фреймворка была обновлена).

Другие вопросы по тегам