利用Sourcery,進一步優化Model層,減小模板代碼

閱讀體驗更佳,請點擊

先來看看效果:

優化前:

優化後:

通過優化,能夠發現代碼行數減小了一半,而除去的代碼其實就是咱們爲了解析JSON的 模板代碼。對於我來講這些甚至能夠說是冗餘的代碼,我是堅定的瘦Model的擁護者。Model層中除必要的數據結構,我不但願出現有其餘冗餘的代碼,影響閱讀。但咱們又必須讓咱們Model擁有解析JSON的能力。 基於上述的需求,個人解決方法是利用 Sourcery實現 AutoUnbox,在不增長模板代碼的基礎上,讓Model實現 Unboxable。(本文中以Unbox爲例,也可替換爲 Codable等)

第一步:認識Sourcery

Sourcery is a code generator for Swift language, built on top of Apple's own SourceKit. It extends the language abstractions to allow you to generate boilerplate code automatically.git

Sourcery是一個Swift的代碼生成器,基於Apple自家的SourceKit。它經過擴展語言的抽象性,來實現了自動生成模板代碼。github

第二步:書寫模板

在項目中建立識別的標記: swift

模板是經過 stencil語言書寫的。

第三步:Podfile中引入Sourcery

  • pod 'Sourcery'
  • pod install

第四步: add Script

在項目的Build Phases增長一個Script,命名爲Sourcery。 $PODS_ROOT/Sourcery/bin/sourcery --sources $SRCROOT/creams --templates $SRCROOT/creams/Infrastructure/Sourcery/AutoUnbox/AutoUnbox.stencil --output $SRCROOT/creams/Infrastructure/Sourcery/ 注意請將Sourcery放置在第一位,保證在代碼編譯以前,模板代碼已經生成完畢 數據結構

測試

  • comand + B
  • 在$SRCROOT/creams/Infrastructure/Sourcery/路徑下會c生成一個AutoUnbox.generated.swift,這個文件中包含了全部生成的代碼,即全部須要實現Unboxable的Model的Extension。
相關文章
相關標籤/搜索