阅读 1775

Xcode 13 新特性和改进

建议横屏阅读代码

界面

Xcode 13 重新设计了 Project Navigator,各种不同的文件类型使用了符号化的图标。默认情况下,文件扩展名是隐藏的。总体来说,视觉观感变得更干净了。

Xcode Cloud

Xcode Cloud 是对于团队协作是一项重要的补充特性,它允许持续集成和交付,跨越多种设备类型进行并行测试,还能自动推送 App 到 TestFlight,使得测试人员获取最新版本的项目构建更加便捷。

源码编辑器

源码编辑器是我们在开发过程中花费最多时间的地方,Xcode 13 在源代码编辑器方面改进了不少细节,尤其是自动补全功能。

自动导入

如果你在编写代码时使用了当前不可用的类型,Xcode 会自动帮你导入相关的框架。比如,如果你编写下面这样的代码:

struct ExampleView: View
复制代码

Xcode 会检测到 View 属于 SwiftUI 框架,然后在代码补全时自动添加 import SwiftUI 到源文件头。

解包语句自动补全

如果你尝试解包一个可选型,Xcode 现在会为你自动补全。尝试下面这样的代码:

struct UserGreeting {
    func greet(name: String?) {
        if let na
    }
}
复制代码

当你在键入 if let na 时,Xcode 会提供 if let name = name 作为自动补全的选项。

更深路径的自动补全

Xcode 现在还能针对属性之下的属性提供深路径的自动补全。尝试下面这样的代码:

class ExampleVC: UIViewController {
    override func viewDidLoad() {
        let someText = UILabel()
        view.corn
        view.addSubview(someText)
    }
}
复制代码

当你在键入 view.corn 时,Xcode 会提供 view.layer.cornerRadius作为补全选项 —— 它实际上检查了 layer 下的属性并且把它们提升到上层作为补全选项。

Switch case 自动补全

当你在使用 switch 语句时,Xcode 现在会用所有的枚举 case 自动补全。尝试下面这样的代码:

struct PaintMixer {
    enum Color {
        case red, green, blue, tartan
    }

    func handle(color: Color) {
        switch col
    }
}
复制代码

当你在键入 switch col 时,Xcode 会自动补全 colcolor,并且填充该枚举类型所有可能的 case。

数组遍历语句自动补全

当你遍历一个数组时,Xcode 现在能够用数组名称的单数形式自动为你补全 for 语句。尝试下面这样的代码:

struct NamePrinter {
    let names = ["Becca", "Holly", "Ted"]

    func printNames() {
        for nam
    }
}
复制代码

当你在键入for nam,Xcode 会自动补全剩余的部分,输出 for name in names —— 它能够知道 names 是复数,并且创建单数版本并且用作遍历的变量名。

如果要我猜测的话,我估计这个特性是基于某种机器学习的策略,因为 Xcode 可以理解各种形式的复数 —— 包括不规则的复数。尝试下面这样的代码:

let indices = [1, 2, 3]
let people = ["Eric", "Maeve", "Otis"]
let millennia = [1000, 2000, 3000]
let geese = ["Golden", "Mother", "Untitled"]
复制代码

列断点

Xcode 13 可以让你放置“列断点” —— 这是一种可以在一行代码的中间位置精确插入的断点,而不仅仅是以往只能针对整行代码的断点。

比如,我们可能像下面这样调用多个函数来产生某个单一值:

func first() -> String { "A" }
func second() -> String { "B" }
func third() -> String { "C" }

func buildString() -> String {
    first() + second() + third()
}
复制代码

如果我们在 buildString() 这一行放置一个断点,我们需要分别 Step Into 每个函数来查看代码。但是假如我们已经大致知道问题所在,则可以直接放置一个“列断点” —— 比如让 Xcode 精确地停在 second() 的调用点。

你可以尝试上面的代码,选中 second() 然后按 Shift+Cmd+A 调起代码动作 —— 或者右键菜单选择 Show Code Actions,你会看到 Set Column Breakpoint。

列断点的工作方式和常规的行断点是一样的。所以你可以点击并拖拽它们,或者右键编辑它们以添加自定义设置。

Vim 模式

最后一项对于 Xcode 源码编辑器的改进值得特别关注,因为这对于某些程序员来说可能是会令他们爱不释手的一项功能。

这个特性就是 Vim 快捷键绑定,你可以在 Xcode 的偏好设置下启用它 —— 前往 Text Editing,勾选 Enable Vim Key Bindings。

如果你以前没有使用 Vim,我简单介绍一下。Vim 是一个命令行文本编辑器,早在 1976 年就以 Vi 的前身风靡,并于 1991 年升级为“Vi Improved”(简称 Vim)。Vim 的工作方式非常特殊,它需要你仔细了解键盘(某种意义上,可以说 Vim 是高度依赖键盘操作的,这也正是 Vim 能够成就高效代码编写的关键)。现在,你终于可以在 Xcode 13 中应用你在 Vim 里使用的大部分操作。

我之所以说“大部分”,是因为 Xcode 13 目前只支持 Vim 快捷键绑定的一个子集:这其中包括导航、插入、猛拉、搜索等,但相对行号、重复操作、保存 :w 这些操作还是不支持的。不过,这是一个很好的开端,我相信后续还有更多实用的操作会被实现。

版本控制改进

Xcode 已经集成版本控制相当长时间了,但今年这个功能获得了有史以来最大的升级 —— 比较任意两个版本之间的变化变得更加容易,你还可以在 Xcode 中打开 pull requests,邀请代码审查者,甚至在 IDE 内直接处理 code review。

**提示:**你需要打开 Xcode 的源代码控制功能才能正常工作。如果你之前禁用了这个功能,可以到 Preferences > Source Control 下勾选 Enable Source Contro 来重新启用。

用 DocC 创建自定义文档

Xcode 13 现在已经具备从代码中直接创建文档集的功能。它能够读取你添加的 Markdown 注释,将它们构建到 Xcode 的帮助系统,其所采用的布局和格式同苹果自家的框架是一样的。

对 DocC 感兴趣的读者建议阅读公众号的前一篇推文 《探索 DocC》。


更多文章,欢迎关注微信公众号:Swift花园

文章分类
iOS
文章标签