我想设置一个Playground,以获取Macbook的电池状态。
我已经尝试了以下方法:
import Cocoa import IOKit import Foundation var blob = IOPSCopyPowerSourcesInfo()
我目前收到如下错误
使用未解决的标识符“ IOPSCopyPowerSourcesInfo”
它在Playground中不起作用,但在真实的应用程序中起作用。
但是,我只能IOPowerSources.h用Swift 无法访问头文件import IOKit:我不得不与Objective-C建立桥梁。
IOPowerSources.h
import IOKit
这是我的解决方案:
添加IOKit.framework到您的项目(单击+进入Linked Frameworks and Libraries)
IOKit.framework
+
Linked Frameworks and Libraries
.m无论名称如何,都创建一个新的空文件。然后,Xcode将询问是否应创建“桥接标头”。说是。
.m
忽略.m文件。在YOURAPPNAME-Bridging-Header.hXcode刚刚创建的新文件中,添加该行#import <IOKit/ps/IOPowerSources.h> (不要import IOKit在您的Swift文件中添加)
YOURAPPNAME-Bridging-Header.h
#import <IOKit/ps/IOPowerSources.h>
您现在可以访问大多数IOPowerSources功能。
IOPowerSources
例:
func getBatteryStatus() -> String { let timeRemaining: CFTimeInterval = IOPSGetTimeRemainingEstimate() if timeRemaining == -2.0 { return "Plugged" } else if timeRemaining == -1.0 { return "Recently unplugged" } else { let minutes = timeRemaining / 60 return "Time remaining: \(minutes) minutes" } } let batteryStatus = getBatteryStatus() print(batteryStatus)
注意:我无法像 这样访问常量kIOPSTimeRemainingUnlimited,kIOPSTimeRemainingUnknown因此我使用了它们的原始值(-2.0和-1.0),但是如果这些常量仍然存在于某个地方,那将更好。
kIOPSTimeRemainingUnlimited
kIOPSTimeRemainingUnknown
又如 ,具有IOPSCopyPowerSourcesInfo:
IOPSCopyPowerSourcesInfo
let blob = IOPSCopyPowerSourcesInfo() let list = IOPSCopyPowerSourcesList(blob.takeRetainedValue()) print(list.takeRetainedValue())
结果:
=内部; 类型= InternalBattery; } )