Maa*_*uri 4 macos cocoa battery batterylevel swift
我想设置一个Playground来获取我的macbook的电池状态.
我已经尝试过以下方法:
import Cocoa
import IOKit
import Foundation
var blob = IOPSCopyPowerSourcesInfo()
Run Code Online (Sandbox Code Playgroud)
我目前收到如下错误
使用未解析的标识符'IOPSCopyPowerSourcesInfo'
aya*_*aio 13
它在Playground中不起作用,但它可以在真实的应用程序中运行.
我无法IOPowerSources.h使用Swift 访问头文件import IOKit,但是:我必须建立一个与Objective-C的桥梁.
这是我的解决方案:
添加IOKit.framework到您的项目(点击+中Linked Frameworks and Libraries)
创建一个新的空.m文件,无论其名称如何.然后Xcode将询问它是否应该制作"桥接头".说是的.
忽略该.m文件.在YOURAPPNAME-Bridging-Header.hXcode刚创建的新文件中,添加行#import <IOKit/ps/IOPowerSources.h> (并且不要添加import IOKit到Swift文件中)
您现在可以访问大多数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)
Run Code Online (Sandbox Code Playgroud)
注意:我无法访问常量kIOPSTimeRemainingUnlimited,kIOPSTimeRemainingUnknown因此我使用了它们的原始值(-2.0和-1.0),但如果它们仍存在于某处,最好找到这些常量.
另一个例子,有IOPSCopyPowerSourcesInfo:
let blob = IOPSCopyPowerSourcesInfo()
let list = IOPSCopyPowerSourcesList(blob.takeRetainedValue())
print(list.takeRetainedValue())
Run Code Online (Sandbox Code Playgroud)
结果:
=内部; Type = InternalBattery; } )
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |