Swift의 디버그 진행률을 독립적으로 정의하는 디버그 함수
8878 단어 Swift
Swift의 디버그 함수 만들기
어플리케이션 도장 Advent Calendar 2015의 톱타자@mo_to_44.Advent Calendar의 첫 번째 투고이기 때문에 디버그 함수를 약간 정의해 보려고 합니다.
DebugLog 함수
이것은 전선이다.코드가gist로 업그레이드.func DebugLog(@autoclosure condition: () -> Bool = true, _ message: String = "", function: StaticString = __FUNCTION__, file: StaticString = __FILE__, line: UInt = __LINE__) {
#if DEBUG
if let fileName = NSURL(string: String(file))?.lastPathComponent {
print("time: \(NSDate()), message: \(message), function: \(function), file: \(fileName), line: \(line)")
} else {
print("time: \(NSDate()), message: \(message), function: \(function), file: \(file), line: \(line)")
}
assert(condition, message, file: file, line: line)
#endif
}
#if DEBUG
에 대한 설정 방법은 Build Settings&Swift Compuiler&Other Swift Flags에서 지정-DDEBUG
하면 OK.
뭐 해요?
그가 무엇을 하고 있는지 우리에게 보여 주시오.DebugLog
함수에서 한 일은 다음과 같다.
func DebugLog(@autoclosure condition: () -> Bool = true, _ message: String = "", function: StaticString = __FUNCTION__, file: StaticString = __FILE__, line: UInt = __LINE__) {
#if DEBUG
if let fileName = NSURL(string: String(file))?.lastPathComponent {
print("time: \(NSDate()), message: \(message), function: \(function), file: \(fileName), line: \(line)")
} else {
print("time: \(NSDate()), message: \(message), function: \(function), file: \(file), line: \(line)")
}
assert(condition, message, file: file, line: line)
#endif
}
DebugLog
호출된 시간의 출력DebugLog
호출된 원본의 파일 이름 출력DebugLog
호출원의 함수 이름 출력DebugLog
원본 파일의 줄 출력 호출assert
의 실행 print
함수에서만 호출NSDate()
하여 현재 시간을 출력합니다.다른 부분을 살펴봅시다.출력 함수 이름, 파일 이름 및 파일의 행 수
Swift에서
__FILE__
,__LINE__
,__COLUMN__
,__FUNCTION__
와 같은 특수 식별자를 정의하고 이 특수 식별자를 이용하여 함수명, 파일명, 파일내행수의 출력(참조)을 한다.__FILE__
__LINE__
__COLUMN__
__FUNCTION__
파일 이름행수
열수
함수.
assert 함수 호출
condition
가 false
일 때assert
집행한다.이상 값이 있을 때assert
실행됩니다.로그와 assert를 구분하기 위한 기본 파라미터를 지정합니다
DebugLog
의 매개 변수는 모두 기본 매개 변수를 지정합니다. DebugLog()
와 같이 호출할 때 로그만 출력합니다.class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
DebugLog()
}
}
상기 코드를 실행할 때 다음 로그를 출력합니다.
time: 2015-11-29 14:55:09 +0000, message: , function: viewDidLoad(), file: ViewController.swift, line: 16
디버그 시 assert
수치를 검사하려면 다음과 같이 호출하십시오.someValue
1이 부족하면 로그 출력과 동시에 assert
실행을 중지합니다.class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let someValue = 0
DebugLog(someValue > 0)
}
}
다음 로그를 출력하고 프로그램이 정지합니다.
time: 2015-11-29 14:58:32 +0000, message: , function: viewDidLoad(), file: ViewController.swift, line: 18
assertion failed: : file /Users/Motoki/Desktop/Example/Example/ViewController.swift, line 18
두 번째 매개변수는 추가 정보로 정보를 입력할 수 있습니다.class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let someValue = 0
DebugLog(someValue > 0, "Unexpected value")
}
}
이렇게 지정하면 출력은 다음과 같습니다.time: 2015-11-29 15:11:03 +0000, message: Unexpected value, function: viewDidLoad(), file: ViewController.swift, line: 16
assertion failed: Unexpected value: file /Users/Motoki/Desktop/Example/Example/ViewController.swift, line 16
총결산
필요한 정보는 항목에 따라 달라질 수 있지만 함수명, 파일명, 행수 등을 알면 디버깅할 때 편리할 것 같습니다.이번에는 상황
assert
함수에 따라 실행한다.디버그 함수를 정의하는 참고로 삼으십시오.
참고 자료
Reference
이 문제에 관하여(Swift의 디버그 진행률을 독립적으로 정의하는 디버그 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/motokiee/items/4a7d4e67e8905c5db681텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)