在Objective C中,您可以记录使用以下方法调用的方法:
NSLog(@"%s", __PRETTY_FUNCTION__)
通常,这是在日志记录宏中使用的。
尽管Swift不支持宏(我认为),但我仍然想使用一个通用的日志语句,其中包含被调用函数的名称。在Swift中有可能吗?
更新: 我现在使用此全局函数进行日志记录,可以在以下位置找到它:https : //github.com/evermeer/Stuff#print 并且可以使用以下命令进行安装:
pod 'Stuff/Print'
这是代码:
public class Stuff { public enum logLevel: Int { case info = 1 case debug = 2 case warn = 3 case error = 4 case fatal = 5 case none = 6 public func description() -> String { switch self { case .info: return "❓" case .debug: return "✳️" case .warn: return "⚠️" case .error: return "🚫" case .fatal: return "🆘" case .none: return "" } } } public static var minimumLogLevel: logLevel = .info public static func print<T>(_ object: T, _ level: logLevel = .debug, filename: String = #file, line: Int = #line, funcname: String = #function) { if level.rawValue >= Stuff.minimumLogLevel.rawValue { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss:SSS" let process = ProcessInfo.processInfo let threadId = "?" let file = URL(string: filename)?.lastPathComponent ?? "" Swift.print("\n\(level.description()) .\(level) ⏱ \(dateFormatter.string(from: Foundation.Date())) 📱 \(process.processName) [\(process.processIdentifier):\(threadId)] 📂 \(file)(\(line)) ⚙️ \(funcname) ➡️\r\t\(object)") } } }
您可以这样使用:
Stuff.print("Just as the standard print but now with detailed information") Stuff.print("Now it's a warning", .warn) Stuff.print("Or even an error", .error) Stuff.minimumLogLevel = .error Stuff.print("Now you won't see normal log output") Stuff.print("Only errors are shown", .error) Stuff.minimumLogLevel = .none Stuff.print("Or if it's disabled you won't see any log", .error)
这将导致:
✳️ .debug ⏱ 02/13/2017 09:52:51:852 📱 xctest [18960:?] 📂 PrintStuffTests.swift(15) ⚙️ testExample() ➡️ Just as the standard print but now with detailed information ⚠️ .warn ⏱ 02/13/2017 09:52:51:855 📱 xctest [18960:?] 📂 PrintStuffTests.swift(16) ⚙️ testExample() ➡️ Now it's a warning 🚫 .error ⏱ 02/13/2017 09:52:51:855 📱 xctest [18960:?] 📂 PrintStuffTests.swift(17) ⚙️ testExample() ➡️ Or even an error 🚫 .error ⏱ 02/13/2017 09:52:51:855 📱 xctest [18960:?] 📂 PrintStuffTests.swift(21) ⚙️ testExample() ➡️ Only errors are shown
斯威夫特有#file,#function,#line 和 #column。从Swift编程语言:
#file
#function
#line
#column
#file -字符串-出现在其中的文件的名称。
#line -整数-它出现的行号。
#column -Int-起始的列号。
#function -字符串-出现在其中的声明的名称。