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
参考链接:https://www.jianshu.com/p/0158144f1fe1
参考链接:https://juejin.cn/post/6911705237266890759