KMCommonDefine.swift 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //
  2. // KMCommonDefine.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/3/28.
  6. //
  7. import Foundation
  8. /*  KMCommonDefine [共用的定义] 
  9. ** 用于定义一些共用的函数、共用的通知名称、其他
  10. */
  11. // MARK: - 共用的函数
  12. public func KMPrint(_ items: Any..., separator: String = " ", terminator: String = "\n") {
  13. #if DEBUG
  14. print(items, separator: separator, terminator: terminator)
  15. #endif
  16. }
  17. public func km_synchronized<T>(_ lock: AnyObject, _ body: () throws -> T) rethrows -> T {
  18. objc_sync_enter(lock)
  19. defer { objc_sync_exit(lock) }
  20. return try body()
  21. }
  22. // MARK: - 共用的通知名称
  23. // MARK: - 共用的Block
  24. typealias KMItemClickBlock<T> = (_ item: T?, _ index: Int)->()
  25. typealias KMCommonClickBlock = (_ index: Int, _ params: Any...)->()
  26. typealias KMCommonBlock = (_ params: Any...)->()
  27. typealias KMEmptyBlock = ()->Void
  28. typealias KMValueDidChangeBlock = (_ value: Any?, _ change: [NSKeyValueChangeKey : Any]?)->()
  29. typealias KMResultBlock = (_ result: KMResult?, _ params: Any...)->Void
  30. // MARK: - 其他
  31. let kKMLocalForDraggedTypes = NSPasteboard.PasteboardType(rawValue: "KMLocalForDraggedTypes")
  32. let kKMMainMenuAccountRefreshItemTag = 16
  33. let KMSelectorCopy = NSSelectorFromString("copy:")
  34. let KMNormalBlankSize = NSMakeSize(595, 842)
  35. // MARK: - 特定的Block
  36. typealias KMBatchActionBlock = (_ controller: NSWindowController, _ files: [KMFileAttribute]) -> Void
  37. // MARK: - KM & KMProtocol
  38. public struct KM<Base> {
  39. public let base: Base
  40. init(_ base: Base) {
  41. self.base = base
  42. }
  43. }
  44. // 凡是遵守了 KMProtocol 协议的类型就都获取了 km 属性
  45. // km 的类型是 KM, KM的关联类型(泛型)就是他自己
  46. public protocol KMProtocol {}
  47. extension KMProtocol {
  48. public var km: KM<Self> {
  49. return KM(self)
  50. }
  51. public static var km: KM<Self>.Type {
  52. return KM.self
  53. }
  54. }
  55. // 所有 NSObject 的子类都默认遵循了 KMProtocol
  56. extension NSObject: KMProtocol {}