巧妙地實現 debugOnly 函式

2021-09-11 09:19:45 字數 799 閱讀 7489

以往我們實現debug函式,一般都是直接使用 compile flag (也就是編譯巨集)去實現的:

func

debug

(_ action: ()

-> void)

複製**

但這種方式需要修改工程檔案的設定,而且離開了 xcode 就不能很好地使用。

今天看vapor 的原始碼時看到了乙個很巧妙的實現:

func

debugonly

(_ body: ()

-> void) ())

}複製**

這是assert函式的宣告:

func

assert

( _ condition: @autoclosure ()

-> bool,

_ message: @autoclosure () -> string = default,

file: staticstring = #file,

line: uint = #line

)複製**

condition由於@autoclosure的標記會把傳入的值自動裝到閉包裡,然後只有在 debug 模式下才會執行並且求值,通過這種方式就可以很完美地實現乙個debugonly函式。

覺得文章還不錯的話可以關注一下我的部落格

如何巧妙地使用遞迴

以下三個條件需同時滿足 ref 乙個問題的解可以分解為幾個子問題的解 子問題與原問題除了資料規模不一樣,求解思路完全一樣 存在遞迴終止條件 兩步走 寫出遞推公式 大問題化小問題 找到終止條件 計算機擅長做重複的事情,但是人腦不是。如果看到遞迴,總是想著一層一層地遞迴展開,然後再一層一層地返回,人腦很...

如何巧妙地使用遞迴

以下三個條件需同時滿足 ref 乙個問題的解可以分解為幾個子問題的解 子問題與原問題除了資料規模不一樣,求解思路完全一樣 存在遞迴終止條件 兩步走 寫出遞推公式 大問題化小問題 找到終止條件 計算機擅長做重複的事情,但是人腦不是。如果看到遞迴,總是想著一層一層地遞迴展開,然後再一層一層地返回,人腦很...

2 5 2 如何巧妙地推動愛

這也就是今天我們將主要講述到的內容。如何讓你愛的人愛上你?在這部分裡,我們會講兩個要素,第二要素是相似的個性,互補的需求,第三要素是自尊。這兩者,也是促成愛情的不可缺少的要素。2 相似的個性,互補的需求 原書中有一句話 如果人們在自己周圍建立乙個蠶繭,並和那個與自己一致的人共同居住在那裡時,就會覺得...