Xcode 10 代码完成占位符——“T”是什么?

mat*_*att 6 code-completion ios swift xcode10

在 Xcode 10 代码完成中,占位符标记下方的文本#T#前面有一个额外的内容(要查看是否如此,请将插入的代码模板复制并粘贴到不同的文本编辑器中):

let alert = UIAlertController(
    title: <#T##String?#>, message: <#T##String?#>, 
    preferredStyle: <#T##UIAlertController.Style#>)
Run Code Online (Sandbox Code Playgroud)

那是什么?“T”是指类型吗?它对我对占位符的使用有何不同?

fer*_*ins 11

该语法<#T##_A_##_B_#>用于指定占位符的默认代码段。占位符将显示为_A_,但当用户按下回车键时,占位符将被替换为_B_

占位符:

在此输入图像描述

按回车后:

在此输入图像描述

当向观众展示某些内容时,这是一个有用的功能,因为与代码片段相比,我不需要记住每个代码片段的名称,我只需选择一个占位符并按 Enter 键即可获取正确的代码片段。

编辑

回答你的问题,确实看起来T指的是类型。如果您尝试用表达式(例如 )替换占位符,则<#T##Example1##let i = 3#>占位符不会let i = 3像您期望的那样被替换。它被替换为<<error type>>.

此外,该占位符<#T##transform: (Error) throws -> U?##(Error) throws -> U?#>替换为:

{ (<#Error#>) -> U? in
    <#code#>
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是,当您在前面添加 时,T您是在告诉 Xcode 您将提供一个类型,然后 Xcode 会为该类型找到适当的默认值。