30.3. 关键字和标点符号

下面这些被保留的关键字不允许用作标识符,除非使用反引号转义,具体描述请参考 30.2. 标识符 。除了 inoutvar 以及 let 之外的关键字可以用作某个函数声明或者函数调用当中的外部参数名,无需添加反引号转义。当一个成员与一个关键字具有相同的名称时,不需要使用反引号来转义对该成员的引用,除非在引用该成员和使用该关键字之间存在歧义 - 例如,selfTypeProtocol 在显式的成员表达式中具有特殊的含义,因此它们必须在该上下文中使用反引号进行转义。

  • 用在声明中的关键字:associatedtypeclassdeinitenumextensionfileprivatefuncimportinitinoutinternalletopenoperatorprivateprotocolpublicrethrowsstaticstructsubscripttypealias 以及 var
  • 用在语句中的关键字:breakcasecontinuedefaultdeferdoelsefallthroughforguardifinrepeatreturnswitchwhere 以及 while
  • 用在表达式和类型中的关键字:asAnycatchfalseisnilsuperselfSelfthrowthrowstrue 以及 try
  • 用在模式中的关键字:_
  • 以井字号(#)开头的关键字:#available#colorLiteral#column#else#elseif#endif#error#file#filePath#fileLiteral#function#if#imageLiteral#line#selector#sourceLocation以及 #warning
  • 特定上下文中被保留的关键字:associativityconveniencedynamicdidSetfinalgetinfixindirectlazyleftmutatingnonenonmutatingoptionaloverridepostfixprecedenceprefixProtocolrequiredrightsetTypeunownedweak 以及 willSet。这些关键字在特定上下文之外可以被用做标识符。
  • 以下符号被保留为标点符号,不能用于自定义运算符:(){}[].,:;=@#&(作为前缀运算符)、->、`` ?、以及 !`(作为后缀运算符)。
下一节:字面量(literal) 用来表示源码中某种特定类型的值,比如一个数字或字符串。