Поиск последовательных портов с помощью 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 может справиться прямо сейчас - обязательно прочитайте эти две страницы, прежде чем идти дальше:
- Взаимодействие с API C (раздел "Указатели ")
- Работа с типами данных какао (раздел "Неуправляемые объекты ")
Наконец, убедитесь, что вы можете войти в преобразованные объявления Swift для IOKit
фреймворк. Есть много полезных комментариев, и вы сможете увидеть, какие параметры и возвращаемые значения являются неуправляемыми или указателями (так как я не думаю, что официальная документация этого фреймворка была обновлена).