作者:静风疾水 | 来源:互联网 | 2023-10-12 15:03
在思考分析swiftlint是如何实现代码格式控制的时候发现,是依赖于sourcekit实现的。sourcekit是个什么东西?sourcekit英文介绍source
在思考分析swiftlint是如何实现代码格式控制的时候发现,是依赖于sourcekit实现的。sourcekit是个什么东西?
sourcekit英文介绍
sourcekit中文博客
1、是什么?
SourceKit 是一套工具集,使得大多数 Swift 源代码层面的操作特性得以支持,例如源代码解析、语法高亮、排版(typesetting)、自动补全、跨语言头文件生成等。
ps:在 Swift 中使用「⌘ + 点击」一个定义在 Obj-C 中令牌,Xcode 将会触发生成一个类 Swift 头文件。称其为类 Swift 是因为该生成的文件并非有效的 Swift3,但至少显示了等效于 Obj-C 令牌的 Swift 语法。
2、什么原理?
SourceKit 借助 Clang 中称作 USR(Unified Symbol Resolution,即统一符号解析)的特性,为源代码令牌(token,例如类,属性,方法等)对应一个唯一标识符。这使得你可以使用 「⌘ + 点击」Xcode 编辑器中任何一处令牌,即可以导航至其定义处。USR 现在甚至更加强大了,可以跨语言(Swift/Obj-C)统一一个代表。
ps:代码颜色全变白了,”cmd+点击”没法跳转了,都是SourceKitService出问题了
3、怎么使用?
SourceKit 是一个私有且无文档的工具,无法直接使用,可以使用一个小技巧让SourceKit 打印日志。
export SOURCEKIT_LOGGING=3 && /Applications/Xcode6-Beta2.app/Contents/MacOS/Xcode //用该命令启动Xcode
这有个使用的小demo
4、相关问题?
SourceKitService 内存占用过高,Swift 代码大部分都会变成白色,代码提示和类型推断都失效
问题
解决:
1、在活动监视器里找到 SourceKitService 双击它,看它打开了哪些目录,去把缓存删除然后强制结束进程,然后重启xcode
2、少写类型推代码,
let array = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]
//改成
let array: [String: [String]] = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]
let userToken = (dataModel?.id ?? "") + (dataModel?.token ?? "") + (dataModel?.timestamp ?? "") + ...
//改成
let userID = dataModel?.id ?? ""
let token = dataModel?.token ?? ""
let timestamp = dataModel?.timestamp ?? ""
...
let userToken = userID + token + timestamp + ...