在Swift中,这个特定的语法是什么意思?

Ult*_*rus 6 parse-platform swift

我一直在尝试按照一些iOS Swift教程连接到Parse.com

codementor.io教程:

  loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | .Facebook | .Twitter
Run Code Online (Sandbox Code Playgroud)

制作学校教程

  loginViewController.fields = [.UsernameAndPassword, .LogInButton, .SignUpButton, .PasswordForgotten, .Facebook]
Run Code Online (Sandbox Code Playgroud)

我假设前者是Switch 1.x,而thelatter是Swift 2.从上下文看,它们看起来是做同样的事情,但我还没有找到语法变化的语言参考.非常难以搜索点,管道和逗号......有人可以解释每个片段中的语法吗?(我正在阅读语言规范,但实际上让应用程序工作会很有趣!)

rob*_*off 7

旧的Swift 1语法基于您处理C和Objective-C中的选项集的方式:您将选项集存储在整数类型中,并使用按位运算符(|&~)来操作它们.因此.UsernameAndPassword | .LogInButton意味着一个选项集,其中包括.UsernameAndPassword.LogInButton选项.在旧语法中,您使用nil表示空选项集(其中不包括任何选项),这基于非空集的语法并不明显.

Chris Lattner描述了WWDC 2015 Session 106中改变的语法:Swift中的新功能.首先,他描述了旧语法的问题:

问题是,当你得到你最终使用的其他语法时,它就不那么好了.你用nil创建一个空选项集 - 它没有意义,因为选项集和选项是完全不同的概念,它们被混合在一起.你使用按位运算来提取它们,这是一个痛苦且容易出错的问题,你很容易弄错.

然后他描述了新的方法:

但是Swift 2解决了这个问题.它使选项集像集一样.这意味着选项集和集合现在形成方括号.这意味着您将获得带有空方括号的空集,并且您可以使用完整的标准集API集来处理选项集.

新语法工作的原因是因为OptionSetType符合ArrayLiteralConvertible协议(间接地,通过符合SetAlgebraType).此协议允许使用数组文字初始化符合对象,方法是使用一个init元素列表.

在新的Swift 2语法中,[ .UsernameAndPassword, .LogInButton ]表示包含选项.UsernameAndPassword.LogInButton选项的选项集.请注意,它看起来就像您可以初始化普通旧语法的语法Set:let intSet: Set<Int> = [ 17, 45 ].新语法使您明确指定一个空选项设置为[].