SwiftFormat
A command-line tool and Xcode Extension for formatting Swift code
用于格式化 Swift代碼的一個命令行工具和 Xcode擴展。
前言
之前的工作中,一直都是自己在維護和開發公司的 iOS項目,對于代碼格式沒有強制要求,但本著嚴格自律的工作作風,自己在寫代碼的時候,都是遵守模仿了Swift官方手冊的代碼風格。而且自己也已經習慣了閱讀這種格式的代碼。畢竟看著美觀啊!
在更換了工作之后,現在的 iOS開發工作已經不是我一個人的戰斗。于是問題來了。同事的項目代碼并沒有準守官方手冊的代碼風格,而且很多地方看起來就很不規范的樣子。在這個方面,公司也沒有做出個統一規范。這讓我在看同事代碼的時候就特別不舒服,有時甚至去主動修改同事的代碼格式。如果真的手動去更改整個項目的代碼格式風格,顯然不現實。于是就萌發了找一個簡單易通的 Swift代碼格式工具的想法...
最后找個了 SwiftFormat。
這次主要解釋 Xcode Extension 的安裝和使用,可直觀較快的解決問題。
安裝與設置
SwiftFormat 用于 Xcode擴展的工具,是一個名叫 SwiftFormat for Xcode.app。
推薦使用 Homebrew 命令安裝。
brew install swiftformat-for-xcode
也可以去 github releases 頁面手動下載 app 的壓縮包。
下載地址
我們直接在頁面選擇最新發布版本的 SwiftFormat.for.Xcode.app.zip下載,下載地址。
下載完成解壓,獲得 app。并將 app 拖入到左邊的應用程序,點擊運行。
安全提示可以忽略,直接打開。
右上角可選擇 Swift語言的版本,默認為自動,可選為自己項目使用的語言版本。
Swift 代碼格式的規則為列表中打勾的選項,可不作調整,自行研究每個選的的作用,目前還沒有漢化。
然后在 系統偏好設置中,找到擴展,勾選 SwiftFormat.for.Xcode 下的選擇框,繼續查看 Xcode Source Editor 里的選項是否打勾,打勾后就完成了安裝設置工作。??
使用
SwiftFormat 使用很簡單,會在 Editor 菜單下增加一個 SwiftFormat 的選項。
Format Selection 處理選中的代碼
Format File 處理當前文件
到這里,安裝使用就已經介紹完畢,需要的小伙伴可以上手試一試啦。??
目前介紹的是 SwiftFormat界面化的 Xcode擴展,功能直接,能快速處理 Swfit代碼格式,另外app 中也提供一些格式化規則的選項,用于自定義化代碼格式化。
使用之后,感覺幾乎沒有什么學習成本,便于大家的代碼格式統一化。
最后,如果對命令感興趣的話,可以了解其命令行工具的使用,可在SwiftFormat的主頁 查看介紹。
cocoapods中的使用方式
把腳本放在build phase,會引起的問題就是build之后才整理代碼導致breakpoint失效,為了解決這個問題,把執行腳本時機放在pre-action,按下build的時候就會先格式化代碼。
(1)pod引入Swift Foramt,Podfile設置如下,然后cd到工程路徑,pod install
platform :ios, "11.0"
def app_pods
pod 'SwiftFormat/CLI', '0.40.4'
# pod 'SwiftFormat/CLI'
end
target 'TestFormat' do
app_pods
end
(2)Edit sheme->Build->Pre-action->New Run Script Action,添加腳本文件。【target —> Edit Scheme —> Build —> Pre-actioins —> + New Run Script Action】
腳本文件內容如下:
記得將腳本中的TestFormat(demo中的項目名)換成自己的項目名
if [ "${CONFIGURATION}" = "Debug" ]; then
"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat" --disable unusedArguments,numberFormatting,redundantReturn,andOperator,anyObjectProtocol,trailingClosures,redundantFileprivate --ranges nospace --swiftversion "5.0" "${SRCROOT}/TestFormat/"
echo "format debug build swift code"
else
echo "Not Debug Env, skip format"
fi
(3)寫入不規范的代碼,按下build(Command + B)進行測試。可以看到代碼自動規范化了,再進行building。
// 格式化之前的代碼
func test(){
let isTest = false
if isTest {
NSLog("testing")
}
else{
}
}
}
// 格式化之后的代碼
func test() {
let isTest = false
if isTest {
NSLog("testing")
} else {}
}
完整項目地址:https://github.com/jueyi1127/TestFormat
參考鏈接:http://www.lxweimin.com/p/0158144f1fe1
參考鏈接:https://juejin.cn/post/6911705237266890759