12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //
- // KMAlertTool.swift
- // PDF Reader Pro
- //
- // Created by tangchao on 2023/12/7.
- //
- import Cocoa
- class KMAlertTool: NSObject {
-
- /*
- * NSAlert 弹窗封装
- * 主线程执行
- */
-
- public class func runModel(style: NSAlert.Style = .critical, message: String, informative: String = "", buttons: [String] = [], callback: @escaping ((NSApplication.ModalResponse)->Void)) {
- let block = {
- let result = Self._runModelForMainThread(style: style, message: message, informative: informative, buttons: buttons)
- callback(result)
- }
-
- if Thread.isMainThread {
- block()
- } else {
- Task { @MainActor in
- block()
- }
- }
- }
-
- /*
- * NSAlert 弹窗封装
- * 主线程执行
- * 异步函数
- */
-
- @available(macOS 10.15.0, iOS 13.0, *)
- public class func runModel(style: NSAlert.Style = .critical, message: String, informative: String = "", buttons: [String] = []) async -> NSApplication.ModalResponse {
- return await withCheckedContinuation({ continuation in
- self.runModel(style: style, message: message, informative: informative, buttons: buttons) { response in
- continuation.resume(returning: response)
- }
- })
- }
-
- /*
- * NSAlert 弹窗封装
- * 主线程调用
- * 无返回值
- */
-
- public class func runModelForMainThread(style: NSAlert.Style = .critical, message: String, informative: String = "", buttons: [String] = []) {
- _ = self._runModelForMainThread(style: style, message: message, informative: informative, buttons: buttons)
- }
-
- /*
- * NSAlert 弹窗封装
- * 主线程调用
- * 有返回值
- */
-
- public class func runModelForMainThread_r(style: NSAlert.Style = .critical, message: String, informative: String = "", buttons: [String] = []) -> NSApplication.ModalResponse {
- return self._runModelForMainThread(style: style, message: message, informative: informative, buttons: buttons)
- }
-
- // MARK: - Private Methods
-
- /*
- * NSAlert 弹窗封装
- * 主线程调用
- */
-
- private class func _runModelForMainThread(style: NSAlert.Style = .critical, message: String, informative: String = "", buttons: [String] = []) -> NSApplication.ModalResponse {
- if Thread.isMainThread == false {
- #if DEBUG
- assert(false, "need main thread doing ...")
- #endif
- return .stop
- }
- let alert = NSAlert()
- alert.alertStyle = style
- alert.messageText = message
- alert.informativeText = informative
-
- for title in buttons {
- alert.addButton(withTitle: title)
- }
- return alert.runModal()
- }
- }
|