我正在尝试编写一个程序,它将扫描可用的串行端口,并在弹出菜单中呈现它们。为什么我不能直接从
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
}
}
}
CFString
进行转换:var swiftString:String = cfStr as String
。您的var swiftString:String = nsTypeString
示例现在需要后缀as String
才能编译。 - mklement0