由于種種原因,簡書等第三方平臺博客不再保證能夠同步更新,歡迎移步 GitHub:https://github.com/kingcos/Perspective/。謝謝!
Swift Lint is a tool to enforce Swift style and conventions.
Date | Notes | Swift | Xcode |
---|---|---|---|
2017-04-30 | 首次提交 | 3.1 | 8.3.2 |
前言
最近一個月荡陷,文章的更新速度慢了下來,原因一是并不是所有內容都值得發(fā)表迅涮。有些純粹熟練度的問題废赞,大可不必浪費時間和精力作文。二是最近找了不少外文的資料叮姑,需要消化一陣子才行唉地。另外,博客(http://maimieng.com)基本上閑置了下來传透,其中有多說不再支持的原因耘沼,另外 Hexo 有時也會抽風(主要是 node),而博客的主要目的在于文章朱盐,而非這些形式群嗤。所以未來會著重在簡書,有些有深度的文章會發(fā)布到掘金專欄兵琳。而類似本文的記錄型文章僅發(fā)布在此狂秘,目的主要是為了給自己提醒骇径。另外有些文章可能會隨著時間而有一些內容變更,因此從今往后的文章開頭會有文章迭代的版本信息者春。以往的文章會在后續(xù)若有更新時進行調整破衔,另外也會保證掘金和簡書文章內容的同步。其實也有意向在未來更新英文版于 Medium钱烟。
realm/SwiftLint 是 Realm 開源的一個加強檢查 Swift 語言規(guī)范的庫晰筛,滿足強迫癥的所有「幻想」。代碼風格規(guī)范在協作開發(fā)中的重要性不言而喻拴袭。不過读第,由于其官方 GitHub 為英文敘述,可能對我們有一些阻礙稻扬。那么本文就簡單通俗地描述一下 Swift Lint 的基本配置卦方。
安裝
- 在官方文檔中羊瘩,Swift Lint 提供了四種安裝方式泰佳。
- 若要全局安裝(即一次安裝,所有項目均可使用)建議選擇下載最新的 Release 包(.pkg)并安裝尘吗。因為經我個人測試 Homebrew 的安裝途中可能會出現問題逝她,且沒有找到好的解決方法,但大家也可嘗試直接
brew install swiftlint
睬捶。 - 全局安裝之后黔宛,可以在 Terminal 輸入
swiftlint version
測試是否安裝成功。 - 若要針對某個項目安裝擒贸,可以在 Xcode 項目的 Podfile 中加上
pod 'SwiftLint'
并 install 即可臀晃。(推薦)
使用
- 為方便演示配置過程,新建一個 Swift-Lint-Demo 項目介劫。
選擇全局或 Pod 安裝 Swift Lint(為演示后續(xù)操作徽惋,本機全局安裝了 Swift Lint,也在項目中 Pod 安裝座韵,后續(xù)會指出兩者配置的不同)险绘。
為 Xcode 添加運行腳本(Run Script Phase)。
- 在圖中黑色編輯區(qū)域添加腳本(選擇一種即可)誉碴。
- 全局安裝添加以下腳本
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
- 若安裝有問題宦棺,Xcode 找不到全局的 Swift Lint 就會出現「warning: SwiftLint not installed...」的警告,那么你就需要檢查是否成功的全局安裝了 Swift Lint黔帕。
- Pod 安裝添加以下腳本
"${PODS_ROOT}/SwiftLint/swiftlint"
- 添加完腳本之后代咸,重新編譯即可(Cmd + B),默認的空項目其實已經暗含了很多與 Swift Style 不符合的風格成黄,如果你也受不了這么多警告和錯誤呐芥,那就去一個個修復它吧白华。
配置
- Swift Lint 在完成上述操作之后,便已經生效贩耐。但是弧腥,如果覺得默認的風格過于嚴格,或者項目組有另外的要求潮太,Swift Lint 也可以定制相應的風格管搪,或者禁用某些規(guī)則。
- Swift Lint 的全部規(guī)則可以在:Source/SwiftLintFramework/Rules 目錄內找到铡买。
禁用/開啟規(guī)則
Code
- 若要禁用規(guī)則更鲁,需要首先拿到某個規(guī)則的 ID。全局安裝的 Swift Lint 可以在 Terminal 輸入
swiftlint rules
查看所有可獲得的規(guī)則以及對應的 ID奇钞;未全局安裝的 Swift Lint 也可以直接在警告或錯誤提示末尾的小括號中找到其對應的 ID澡为。 - 在代碼中即可使用以下注釋禁用或開啟相應的規(guī)則。
// 作用于該文件該行以下(除非遇到同一規(guī)則的 enable景埃,disable)
// swiftlint:disable <rule1> [<rule2> <rule3>...]
// swiftlint:enable <rule1> [<rule2> <rule3>...]
// eg:
// swiftlint:disable trailing_whitespace vertical_whitespace
// swiftlint:enable trailing_whitespace
// 作用于下一(next)媒至,這一(this),上一(previous)行
// swiftlint:disable:next force_cast
let noWarning = NSNumber() as! Int
let hasWarning = NSNumber() as! Int
let noWarning2 = NSNumber() as! Int // swiftlint:disable:this force_cast
let noWarning3 = NSNumber() as! Int
// swiftlint:disable:previous force_cast
配置文件
- 上述的代碼中禁用/開啟規(guī)則只對其文件內有效谷徙,只能用于臨時的情況拒啰,若想針對項目進行自定義配置,就需要額外的配置文件
.swiftlint.yml
完慧,直接放在項目根目錄即可谋旦。
# eg:
disabled_rules: # rule identifiers to exclude from running
- trailing_whitespace
- 具體詳細的配置即可參考官方 README_CN 的文檔。