我有一个日志功能,我在各种应用程序中使用。它的方便,这也使崩溃日志调用,因为我在整个应用程序中使用它。
然而,并不是每个应用程序都使用Crashlytics。在Objective C中,你可以用预处理器条件来处理这个问题。
如何在代码中处理这个问题呢?我认为有一些方法可以使函数成为条件函数。但是我如何选择性地或弱地导入Crashlytics呢?
import Foundation
//import Crashlytics
/// Debug Log: Log useful information while automatically hiding after release.
func DLog<T>(message: T, filename: String = __FILE__, function: String = __FUNCTION__, line: Int = __LINE__) {
// CLSLogv("\(NSString(string: filename).lastPathComponent).\(function) line \(line) $ \(message)", getVaList([]))
print("[\(NSString(string: filename).lastPathComponent) \(function) L\(line)] \(message)")
}
3条答案
按热度按时间js81xvg61#
现在,你可以在Swift 4.1中使用新的canImport()指令来实现这一点。下面是Swift Evolution的建议,描述了它的工作原理:https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md
因此,您可以执行以下操作:
3b6akqbq2#
在Swift中我会用不同的方式来做,我会让我的log函数具有可扩展性,我会有一个log闭包数组来做实际的日志记录,我的
dlog
函数会调用所有这些函数,例如:输出为
因此,在任何支持Crashlytics的应用程序中,在应用程序启动代码中,您可以将Crashlytics记录器添加到记录器阵列中,即
当然,您应该将上述所有内容封装在一个类中。
jgwigjjp3#
这在Swift中是可能的,即使Swift编译器不包括预处理器。
现在,下面的代码未经测试,可能需要一些调整-但如果你想清理你的代码,它可以帮助!@transparent将内联代码的主体,顺便说一下。
请注意:你必须设置“DEBUG”符号,因为它不是预定义的。2在编译器的“其他Swift标志”行的“Swift编译器-自定义标志”部分设置它。3你可以用-D DEBUG条目来定义DEBUG符号。4希望我能帮上忙!