OSDN Git Service

UAをVersion/10.0.3 Safari/602.4.8に変更
[kcd/KCD.git] / KCD / Debug.swift
1 //
2 //  Debug.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/02/12.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Foundation
10
11 class Debug {
12     enum Level: Int {
13         case none
14         case test
15         case debug
16         case full
17         
18         func higher(other: Level) -> Bool {
19             return self.rawValue >= other.rawValue
20         }
21     }
22     private struct Args: CustomStringConvertible, CustomDebugStringConvertible {
23         let args: [Any]
24         let separator: String
25         var description: String {
26             return args.map { "\($0)" }.joined(separator: separator)
27         }
28         var debugDescription: String {
29             return args
30                 .map { ($0 as? CustomDebugStringConvertible)?.debugDescription ?? "\($0)" }
31                 .joined(separator: separator)
32         }
33     }
34     
35     class func print(_ items: Any..., separator: String = " ", terminator: String = "\n", level: Level = .debug) {
36             excute(level: level) {
37                 Swift.print(Args(args: items, separator: separator),
38                             separator: separator,
39                             terminator: terminator)
40             }
41     }
42     
43     class func debugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n", level: Level = .debug) {
44             excute(level: level) {
45                 Swift.debugPrint(Args(args: items, separator: separator),
46                                  separator: separator,
47                                  terminator: terminator)
48             }
49     }
50     
51     class func dump<T>(_ value: T,
52                        name: String? = nil,
53                        indent: Int = 0,
54                        maxDepth: Int = Int.max,
55                        maxItems: Int = Int.max) -> T {
56         #if DEBUG
57             return Swift.dump(value, name: name, indent: indent, maxDepth: maxDepth, maxItems: maxItems)
58         #else
59             return value
60         #endif
61     }
62     
63     class func excute(level: Level, f: () -> Void) {
64         if UserDefaults.standard.degugPrintLevel.higher(other: level) {
65             f()
66         }
67     }
68 }