iOS 自定義代碼塊&Swift中自定義log

自定義代碼片段(code snippets)

Xcode的代碼片段(Code Snippets)創建自定義的代碼片段,當你重用這些代碼片段時,會給你帶來很大的方便。

比如在OC中我們聲明一個屬性

@property (nonatomic,strong) UIView *bgView;

這是我們經常進行的操作,而且@property (nonatomic,strong)部分都是重復的,很浪費時間,這時候我們可以來自定義代碼片段來節省時間

這里我們就以上面的代碼為例,自定義代碼片段的格式為

@property (nonatomic,strong) <#Class#> *<#object#>

其中<#Class#>的class是提示語,可以自己設置

選中這些代碼,然后拖到Xcode右下角的代碼片段區域


5

其中圖片中的選項含義依次是:

Title:代碼片段的標題

Summary:代碼片段的描述文字

Platform:可以使用代碼片段的平臺,有IOS/OS X/All三個選項

Language:可以在哪些語言中使用該代碼片段

Completion Shortcut:代碼片段的快捷方式,例:strong ? 我們創建成功之后可以直接輸入該選項的字符就可以了

Completion Scopes :可以在哪些文件中使用當前代碼片段,比如全部位置,頭文件中等,當然可以添加多個支持的位置

最后的一個大得空白區域是對代碼片段的效果預覽

大致流程如下:

gif


Swift自定義log

自定義log的目的是在debug模式下打印信息,在release環境下不打印

我們知道,在OC中我們可以定義一個宏,通過#ifdef-#endif模式來判斷是否打印信息,但是在Swift中不支持宏了,所以我們需要換一個方法來實現

1. 設置flags

在 Build Setting里搜索 swift flags找到 OtherSwift Flags選項,在Debug選項下添加 -D 自定義字符串 字段,在release選項下不添加


2. 在代碼中通過#if-#endif來判斷是否存在我們自定義的字符串,以此來判斷是否打印信息

自定義打印信息

Swift中打印是print函數,print打印只會打印我們輸入的內容,很簡單,也比較方便,但有時候我們會打印很多數據,這時候我們就不知道打印的數據到底是在哪里打印的

們自定義的log實質上是一個全局函數,打印的信息包括所在文件、所在代碼行數或者方法名

獲取文件路徑

#file: ?獲取文件的全路徑,不過我們只需要獲取到文件的名字就行了,也就是全路徑的最后一部分

獲取方法名

#function: 獲取方法名

獲取代碼行數

#line: 獲取代碼的行數

代碼如下:

func WYLog(message:T, fileName:String = #file, funcName : String = #function, lineNum : Int = #line)? {

/*

獲取打印所在文件 #file獲取的全路徑

let file = (#file as NSString).lastPathComponent

獲取打印所在的方法

let funcName = #function

獲取所在行

let lineNum = #line

*/

#ifWYDEBUG

let filePath = (fileName as NSString).lastPathComponent

//print("\(filePath):\(funcName):\(lineNum)-\(message)")

print("文件:\(filePath) 行:\(lineNum) log:\(message)")//我們已經打印了行數,所以就不用打印方法名了

#endif

}

上面我們已經自定義了一個log方法,下次再打印信息的時候直接調用該函數就行,但是我們的log不只是在一個類里打印,而是在整個項目里都需要,但是現在只能在一個文件里調用,這個時候我們需要把這個log方法定義為全局函數,這樣所有的文件都可以直接來調用

我們可以把該方法放在appdelete文件里,放在 class 代碼塊的外面,這樣該函數就成了一個全局函數,其他文件就可以直接使用了,其實我們可以放在任意類的外面,都可以成為全局函數,不過我們一般是放在appdelete文件里


比如我們在ViewController中使用我們自定義log,此時為debug模式下


打印信息為:

文件:ViewController.swift 行:32log:123

然后我們把模式調整為release


然后運行,我們會發現什么都不會打印,這樣我們就完成了我們自定義log的目的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,811評論 25 708
  • 每當你成為別人世界里的匆匆過客,在你的世界里別人也亦是如此。 昨天,和現在這一時刻我正和我兒時的伙伴們在同一...
    杜念生閱讀 298評論 0 3
  • 回到家中,已近黃昏。韓翔趕緊把自己的落了幾層補丁的粗布衣服脫下,整整齊齊疊好,小心翼翼的放在床頭。 然后穿上一個洞...
    持筆走天下閱讀 208評論 0 0
  • 掛著大耳麥,她應該正在聽著一首歌;書桌上一本攤開的書,頁碼是第308頁。而她雙唇緊抿,臉上掛滿了淚水,她正在哭呢?...
    段遺閱讀 138評論 0 1
  • 《月光男孩》 該片講述了Chiron成長的故事。影片分三段:小孩、青年、男人。電影中臺詞精簡,大段的留白,...
    妄談瘋話閱讀 191評論 0 0