我可以在Swift的变量名或枚举符号的开头使用$吗?

时间:2015-03-28 01:17:58

标签: swift swift-playground

作为标题。例如:

enum MyEnum {
  case $SYMBOL
}

let $foo = MyEnum.$SYMBOL

我得到error: expected numeric value following '$'

有趣的是,$可以在变量名称的中间使用。是否有我们可以在开始时使用的符号列表?

理由:

根据Apple的语言指南(link):

  

常量和变量名称不能包含空格字符,数学符号,箭头,专用(或无效)Unicode代码点或行和框图字符。它们也不能以数字开头,尽管数字可能包含在名称的其他地方。

不禁止美元符号。

但是,Closure部分确实提到使用$0$1作为速记参数名称:

  

Swift自动为内联闭包提供简写参数名称,可用于通过名称$ 0,$ 1,$ 2等来引用闭包参数的值。

在开始时保留使用美元符号。这与先前的规则相矛盾。

Xcode Playground使情况进一步复杂化。如果我创建一个Swift playground文件并粘贴我的代码,该变量将被评估为(Enum Value)

1 个答案:

答案 0 :(得分:1)

  

我可以在Swift的变量名或枚举符号的开头使用$吗?

否。如果您查看“标识符语法”下的Lexical Structure部分,您会看到允许的所有字符范围列表 identifier_head $U+0024未包含在列表中。

如果再深入挖掘一下,您会发现 enum-case-name 标识符变量名也是标识符,因此标识符的语法决定了允许的内容。

  

不禁止美元符号。

您链接的部分中的“禁止”字符列表似乎并非详尽无遗。不难想出那些未在语法中列出的字符:@#? ......

  

你能解释为什么我的代码在操场上没有失败吗?游乐场是否得到特殊待遇?

这可能是一个错误 - 只是一个操场稍微宽松的情况。