【发布时间】:2014-08-17 17:38:05
【问题描述】:
我正在尝试编写一个程序来扫描可用的串行端口并将它们显示在弹出菜单中。为什么我不能直接从IORegistryEntryCreateCFProperty() 函数中获取CFString 并通过下一行的字符串插值将其添加到菜单中?由于某种原因,我的变量声明遇到了错误:
“NSString 不是 CFString 的子类型”。
import Foundation
import Cocoa
import IOKit
import IOKit.serial
@objc class Serial {
init() {
}
@IBOutlet var serialListPullDown : NSPopUpButton!
func refreshSerialList(defaultprompt: String) {
let masterPort: mach_port_t = kIOMasterPortDefault
let classesToMatch: CFDictionary = IOServiceMatching(kIOSerialBSDServiceValue).takeUnretainedValue()
var matchingServices: io_iterator_t = 0
// remove everything from the pull down list
serialListPullDown?.removeAllItems()
// ask for all the serial ports
let kernResult = IOServiceGetMatchingServices(masterPort, classesToMatch, &matchingServices)
if kernResult == KERN_SUCCESS {
// success
while (io_object_t() == IOIteratorNext(matchingServices)) {
var serialport = IORegistryEntryCreateCFProperty(io_object_t(), kIOCalloutDeviceKey, kCFAllocatorDefault, 0)
serialListPullDown?.addItemWithTitle("\(serialport)")
}
}
else {
// error
}
}
}
【问题讨论】:
标签: string swift serial-port iokit