지금까지 Objective C 에서 콘솔로그는 대체로 NSLog 를 사용하고 있었는데, Swift 언어에서 부터 NSLog 를 사용하지 않고, Print 혹은 dump 함수를 통해 콘솔로그를 출력할 수 있어 간단하게 알아보고자 한다.
기존에 Objective C 에서는 NSLog 를 그냥 사용하기 않고, 아래와 같이 .pch 파일에 NSLog를 재정의 하여, 사용하곤 했다.
—— 프로젝트.pch ——-
1
|
#define NSLog( s, ... ) NSLog( @"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
| cs |
———————————
재정의한 이유를 결과로 보여드리면, ClassName (Line) 줄이 표기되고 안되고 차이를 느낄 수 있다.
1
2
3
4
|
// 기본 NSLog
2019-03-05 21:37:03.779493+0900 SampleProject[26217:131080] Test NSLog
// 재정의 NSLog
2019-03-05 21:34:15.902508+0900 SampleProject[24138:118908] <RootViewController.m:(43)> Test NSLog
| cs |
프로젝트를 진행하면서 NSLog를 무심코 남기지만, 추후 유지보수 및 여러명과 작업을 진행할때 내가 하지 않은 곳을 찾을 떄 해당 Class 찾는 부분의 시간을 단축시켜주는 역할을 도맞아 하고 있다.
Swift에서는 print 항목명을 Define을 통해 이름을 같이 사용할 수는 없으나, 함수로 재정의하여 사용하면 로그에 Class 명과 LineNumber는 찍을 수 있다.
Print() 와 dump() 함수
Print() 함수는 디버깅시 간략한 정보를 출력해준다. 반면 dump() 함수는 조금 더 자세한 정보를 출력해준다.
간략하게 Playground로 테스트 진행하였다.
간략하게 Playground로 테스트 진행하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import UIKit
struct Info {
let name:String
var age:Int
}
var kimjwInfo:Info = Info(name: "KimJW", age: 31)
class Person {
var height:Float = 0.0
var weight:Float = 0.0
}
let kimjwPerson:Person = Person()
kimjwPerson.height = 170.0
kimjwPerson.weight = 60.0
print("print:\(kimjwInfo)")
dump(kimjwInfo)
/**
print:Info(name: "KimJW", age: 31)
▿ __lldb_expr_7.Info
- name: "KimJW"
- age: 31
*/
print("print:\(kimjwPerson)")
dump(kimjwPerson)
/**
print:__lldb_expr_7.Person
▿ __lldb_expr_7.Person #0
- height: 170.0
- weight: 60.0
*/
| cs |
댓글
댓글 쓰기