tha*_*guy 27 objective-c ios swift
所以这个答案我是否需要在发布应用程序之前禁用NSLog?提供了一种在生产环境中禁用NSLog的好方法,但不幸的是,这个解决方案似乎不适用于Swift项目.我的方法是将以下代码放在我用于项目中某些pod的桥接头.h文件中.
#ifdef DEBUG
#define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define DLog(...) do { } while (0)
#endif
Run Code Online (Sandbox Code Playgroud)
但是,在Swift代码中使用DLog会导致编译器声明它们是未经过识别的符号.是否有其他地方我应该放置这个#ifdef或者一般的Swift项目是否有不同的解决方案?
Nat*_*ook 42
您需要设置编译器标志以使用Swift预处理器 - 转到Build Settings 的Swift Compiler - Custom Flags部分以设置-D DEBUG标志:

然后在您的代码中,您可以定义一个DLog()函数,并仅在DEBUG设置了标志时打印您的消息:
func DLog(message: String, function: String = #function) {
#if DEBUG
println("\(function): \(message)")
#endif
}
Run Code Online (Sandbox Code Playgroud)
我是一个非常初级的开发人员,有时需要更清楚地定义一些内容.我一直遇到类似问题的困难,取而代之的是println(),当我问这个问题时,我的查询被标记为这个问题的副本.
经过大量的研究,试验,错误,错误,错误和错误!!后,我发现我需要遵循的顺序是:
-D DEBUG并按Return键提交该行.将新的Swift文件添加到项目中.您将要为该文件创建自定义类,因此请按以下行输入文本:
class Log {
var intFor : Int
init() {
intFor = 42
}
func DLog(message: String, function: String = __FUNCTION__) {
#if DEBUG
println("\(function): \(message)")
#endif
}
}
Run Code Online (Sandbox Code Playgroud)(我今天很难让类init被Xcode接受,所以init可能比必要的重量级更重.)
现在,您需要在任何打算使用新自定义函数的类中引用自定义类,而不是println()在每个适用的类中将其添加为属性:
let logFor = Log()
Run Code Online (Sandbox Code Playgroud)现在,你可以替换的任何实例println()用logFor.DLog().输出还包括调用该行的函数的名称.
println()对输入也更加灵活,所以我无法在每个实例中使用它我的代码.查看关于在此处写断言的Apple Swift博客条目
简而言之,答案是将DLog写成:
func DLog(message:String, function:String = __FUNCTION__) {
#if !NDEBUG
NSLog("%@, %@", function, message)
#endif
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11177 次 |
| 最近记录: |