系統如何調用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環境下,不進行打印.