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.)