我最近遇到了这个答案。它链接到Apple 的Q&A1340,并将清单 2 翻译成 Swift。
我将它重构为一些不同的代码,例如,展示了如何在整个RunLoop. 我确实检查了代码,它有效。
import IOKit.pwr_mgt
var noSleepAssertionID: IOPMAssertionID = 0
var noSleepReturn: IOReturn? // Could probably be replaced by a boolean value, for example 'isBlockingSleep', just make sure 'IOPMAssertionRelease' doesn't get called, if 'IOPMAssertionCreateWithName' failed.
func disableScreenSleep(reason: String = "Unknown reason") -> Bool? {
guard noSleepReturn == nil else { return nil }
noSleepReturn = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep as CFString,
IOPMAssertionLevel(kIOPMAssertionLevelOn),
reason as CFString,
&noSleepAssertionID)
return noSleepReturn == kIOReturnSuccess
}
func enableScreenSleep() -> Bool {
if noSleepReturn != nil {
_ = IOPMAssertionRelease(noSleepAssertionID) == kIOReturnSuccess
noSleepReturn = nil
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
该Q&A1340答案还指出,使用NSWorkspace.shared应该仅被用于支持OS X <10.6。