Swift 从IOPSCopyPowerSourcesInfo()中提取值

Swift 从IOPSCopyPowerSourcesInfo()中提取值,swift,iokit,Swift,Iokit,我有以下代码: var source = IOPSCopyPowerSourcesInfo() print(source) 当我运行它时,它会返回以下内容: Optional(Swift.Unmanaged<Swift.AnyObject>(_value: <__NSCFArray 0x60800026f4c0>( { "Battery Provides Time Remaining" = 1; BatteryHealth = Good; Cu

我有以下代码:

var source =  IOPSCopyPowerSourcesInfo()
print(source)
当我运行它时,它会返回以下内容:

Optional(Swift.Unmanaged<Swift.AnyObject>(_value: <__NSCFArray 0x60800026f4c0>(
{
    "Battery Provides Time Remaining" = 1;
    BatteryHealth = Good;
    Current = "-1756";
    "Current Capacity" = 56;
    DesignCycleCount = 1000;
    "Hardware Serial Number" = C0143160D1JF90MAU;
    "Is Charging" = 0;
    "Is Present" = 1;
    "Max Capacity" = 100;
    Name = "InternalBattery-0";
    "Power Source ID" = 4063331;
    "Power Source State" = "Battery Power";
    "Time to Empty" = 117;
    "Time to Full Charge" = 0;
    "Transport Type" = Internal;
    Type = InternalBattery;
}
)
))
可选(Swift.非托管(\u值:(
{
“电池提供剩余时间”=1;
电池健康=良好;
当前=“-1756”;
“当前容量”=56;
设计周期计数=1000;
“硬件序列号”=C0143160D1JF90MAU;
“正在充电”=0;
“存在”=1;
“最大容量”=100;
Name=“InternalBattery-0”;
“电源ID”=4063331;
“电源状态”=“电池电源”;
“清空时间”=117;
“完全充电时间”=0;
“运输类型”=内部;
类型=内部电池;
}
)
))
我试图从这个闭包中得到“正在收费”的值。我该怎么做

我是Swift的新手,因此任何帮助都将不胜感激


提前谢谢

根据

客户端不应直接访问返回的CFTypeRef中的数据-它们应使用访问器函数IOPSCopyPowerSourcesList和IOPSGetPowerSourcesDescription

以下是一个例子:

import IOKit.ps

let psInfo = IOPSCopyPowerSourcesInfo().takeRetainedValue()
let psList = IOPSCopyPowerSourcesList(psInfo).takeRetainedValue() as [CFTypeRef]

for ps in psList {
    if let psDesc = IOPSGetPowerSourceDescription(psInfo, ps).takeUnretainedValue() as? [String: Any] {
        if let type = psDesc[kIOPSTypeKey] as? String,
            let isCharging = (psDesc[kIOPSIsChargingKey] as? Bool) {
            print(type, "is charging:", isCharging)
        }
    }
}
输出示例:

InternalBattery is charging: false 电池正在充电:错误
源作为数组,然后第一个元素作为字典,然后元素[“正在收费”]?@Larme你能扩展一下吗?效果很好!非常感谢。