1.Objective-C中
#ifdef __OBJC__
#ifdef DEBUG
#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...)
#endif
#endif
在PCH文件中添加上述代码,在程序中使用到NSLog的地方,调试状态下就会有如下的打印结果,打印结果包含当前的打印是在哪个控制器,哪个方法,以及第几行,可以方便我们快速定位当前打印的位置,在程序中代码量很大时对我们有很大帮助;而在发布状态下则不会有任何打印。
控制器中的代码
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"hello world");
}
打印的结果如下:
2016-08-12 05:02:35.675 NSLog测试[3822:19029] -[ViewController viewDidLoad] [Line 19] hello world
2.Swift中
1> 首先,创建一个Constant.swift文件(文件名自定义),导入UIKit框架,添加如下代码
import UIKit
/// 输出日志
/// - parameter message: 日志消息
/// - parameter logError: 错误标记,默认是 false,如果是 true,发布时仍然会输出
/// - parameter file: 文件名
/// - parameter method: 方法名
/// - parameter line: 代码行数
func printLog<T>(message: T,
logError: Bool = false,
file: String = __FILE__,
method: String = __FUNCTION__,
line: Int = __LINE__)
{
if logError {
print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
} else {
#if DEBUG
print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
#endif
}
}
2> 进行如下配置
3> 在控制器中进行如下测试
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("hello world")
print("---------------")
printLog("hello world")
}
}
输出结果如下,很明显,用printLog也实现了类似上述Objective-C中NSLog的功能,可以输出打印是在那个类,哪个方法,第几行。
hello world
---------------
ViewController.swift[18], viewDidLoad(): hello world