Swift中自定義Log打印方法


系統如何調用super方法

系統默認只會在構造函數中,自動調用super.init()方法,而且是在所寫方法的尾部進行調用.

在其他函數中,如何需要調用父類的默認實現,都需要手動去實現.

如果在構造函數中使用KVC,一定要先調用父類的super.init()方法.

自定義Log的方法

以下語法為swift3的最新語法

  • 獲取打印所在的文件
    • let file = (#file as NSString).lastPathComponent
  • 獲取打印所在的方法
    • let funcName = #functon
  • 獲取打印所在的行
    • let lineNum = #line

swift中有全局函數的概念:即將函數定義在項目中任意一個類文件的class外面,就可以在項目中的任何地方均可以調用這個方法.

自定義Log方法就是基於swift的全局函數來實現的.

另外,自定義log的時候,要考慮到在debug環境下進行打印,而在release環境下不需要進行打印.

由於swift中沒有宏定義的概念,所以需要在項目的Build Settings->Other Swift Flags中為Debug添加一個標記,例如"-D DEBUG".

這樣,在代碼中,可以直接通過"DEBUG"這個關鍵詞,來判斷當前的運行環境是否為debug模式.

下面為自定義的Log方法:

func WJQLog<T>(_ messsage : T, file : String = __FILE__, funcName : String = __FUNCTION__, lineNum : Int = __LINE__) {
    
    #if DEBUG
    
    let fileName = (file as NSString).lastPathComponent
    
    print("\(fileName):(\(lineNum))-\(messsage)")
    
    #endif
}

// 調用代碼如下:
WJQLog("test")

解釋:

  • 考慮到自定義Log要打印方法所在的文件/方法名/行號,以及自定義的內容,同時考慮調用的便捷性,所以要使用默認參數,無需調用者傳遞太多的參數.
  • 使用泛型,可以讓調用者傳遞任意的類型,進行打印Log的操作.
  • #if DEBUG和#endif用來判斷,只有在debug環境下,才執行Log里面的代碼進行打印操作.在release環境下,不進行打印.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM