之前我们在objective-c的时候经常使用DEBUG来控制用来调试的代码,如下。
#ifdef DEBUG
NSLog(@"debug log!!!!");
#else
NSLog(@"release log!!!");
#endif
在debug模式中,会输出debug log!!!!
,release模式中则是release log!!!
但是,在swift中如果也向上面的一样使用的话,就会出现意外情况。
#if DEBUG //有一些变化,def变没了
NSLog(@"debug log!!!!");
#else
NSLog(@"release log!!!");
#endif
在debug模式中,会输出release log!!!
,release模式中则是release log!!!
其实,这主要是apple又恶心了下我们。。。
我们需要在Build Settings->Swift Compiler - Custom Flags->Other Swift Flags
中的DEBUG上添加一个-D DEBUG
就可以了。
##自定义日志输出格式
由于Apple那恶心的日志输出方式造成我们无法很快的定位代码位置,这时就需要我们去自定义一个自己需要的日志输出方法了。在objective-c中可以使用PrefixHeader
(PCH文件)的方式添加下面的自定义宏命令
#ifdef DEBUG
#define DLog( s, ... ) NSLog( @"%@ [%@:%d(%p)]", [NSString stringWithFormat:(s), ##__VA_ARGS__], [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, self )
#else
#define DLog( s, ... )
#endif
//使用例子
//DLog(@"我是日志1");
//DLog(@"我是日志%d",2);
//2015-10-28 16:41:18.675 didauth[438:60b] 我是日志1 [LoadingViewController.swift:26]
//2015-10-28 16:41:18.676 didauth[438:60b] 我是日志2 [LoadingViewController.swift:27]
swift中的话宏就没法那么方便的被调用了,这时我们可以做一个对NSObject
的扩展。
//NSOjbect+DLog.swift
extension NSObject{
#if DEBUG
func DLog(s:String,file:String=__FILE__,line:Int=__LINE__){
let filename = NSString(UTF8String: file)!.lastPathComponent;
NSLog("\(s) [\(filename):\(line)]");
}
#else
func DLog(s:String){
}
#endif
}
/*
DLog(@"我是日志1");
let index:int = 2;
DLog(@"我是日志\(index)");
//2015-10-28 16:41:18.675 didauth[438:60b] 我是日志1 [LoadingViewController.swift:26]
//2015-10-28 16:41:18.676 didauth[438:60b] 我是日志2 [LoadingViewController.swift:28]
*/