我想设置一个Playground,以获取Macbook的电池状态。
我已经尝试了以下方法:
import Cocoa
import IOKit
import Foundation
var blob = IOPSCopyPowerSourcesInfo()
我目前收到如下错误
最佳答案
它不适用于 Playground,但它适用于真正的应用程序。
但是,我无法仅使用 Swift 和 IOPowerSources.h
访问 import IOKit
头文件:我必须为 Objective-C 搭建桥梁。
这是我的解决方案:
IOKit.framework
添加到您的项目中(单击 +
中的 Linked Frameworks and Libraries
) .m
文件,不管它的名字是什么。然后 Xcode 会询问它是否应该制作一个“桥接头”。说是。 .m
文件。在Xcode刚刚创建的新的YOURAPPNAME-Bridging-Header.h
文件中,添加#import <IOKit/ps/IOPowerSources.h>
行(并且不要在您的Swift文件中添加import IOKit
)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),但如果它们仍然存在于某处,最好找到这些常量。另一个例子 ,带有
IOPSCopyPowerSourcesInfo
:let blob = IOPSCopyPowerSourcesInfo()
let list = IOPSCopyPowerSourcesList(blob.takeRetainedValue())
print(list.takeRetainedValue())
结果: