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