Xcode 10 个代码完成占位符——"T" 是什么?

Xcode 10 code completion placeholders — what is the "T"?

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

let alert = UIAlertController(
    title: <#T##String?#>, message: <#T##String?#>, 
    preferredStyle: <#T##UIAlertController.Style#>)

那是什么? "T" 是指类型吗?它对我使用占位符有何影响?

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

占位符:

按下回车后:

在向观众展示内容时,这是一个很有用的功能,因为与片段不同,我不需要记住每个片段的名称,我只需要 select 一个占位符并按输入以获取正确的代码。

编辑:

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

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

{ (<#Error#>) -> U? in
    <#code#>
}

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