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 함수에서 한 일은 다음과 같다.
  • DebugLog 호출된 시간의 출력
  • DebugLog 호출된 원본의 파일 이름 출력
  • DebugLog 호출원의 함수 이름 출력
  • DebugLog 원본 파일의 줄 출력 호출
  • assert의 실행
  • 1 아주 간단하네요.print 함수에서만 호출NSDate()하여 현재 시간을 출력합니다.다른 부분을 살펴봅시다.

    출력 함수 이름, 파일 이름 및 파일의 행 수


    Swift에서 __FILE__,__LINE__,__COLUMN__,__FUNCTION__와 같은 특수 식별자를 정의하고 이 특수 식별자를 이용하여 함수명, 파일명, 파일내행수의 출력(참조)을 한다.__FILE__ __LINE__ __COLUMN__ __FUNCTION__파일 이름
    행수
    열수
    함수.

    assert 함수 호출

    conditionfalse일 때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 함수에 따라 실행한다.
    디버그 함수를 정의하는 참고로 삼으십시오.

    참고 자료

  • Swift Blog
  • 좋은 웹페이지 즐겨찾기