我一直在尝试遵循一些iOS Swift教程来连接到Parse.com
loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | .Facebook | .Twitter
loginViewController.fields = [.UsernameAndPassword, .LogInButton, .SignUpButton, .PasswordForgotten, .Facebook]
我假设前者是Switch 1.x,后者是Swift2。从上下文来看,它们似乎在做相同的事情,但是我还没有找到语法更改的语言参考。很难搜索点,管道和逗号...有人可以解释每个摘录中的语法吗?(我正在努力阅读语言规范,但实际上使应用程序正常工作会很有趣!)
旧的Swift 1语法基于您在C和Objective-C中处理选项集的方式:将选项集存储为整数类型,然后使用按位运算符(|
和&
和~
)进行操作。因此,.UsernameAndPassword | .LogInButton
意味着一个同时包含.UsernameAndPassword
和.LogInButton
选项的选项集。在旧语法中,您nil
用来表示一个空选项集(其中不包含任何选项),根据非空集的语法,这并不明显。
克里斯·拉特纳(Chris Lattner)在WWDC 2015会话106:Swift中的新增功能中描述了更改的语法。首先,他描述了旧语法的问题:
问题是,当您使用最终使用的其他语法时,它会不太好用。您使用nil创建一个空选项集-这没有意义,因为选项集和可选选项是完全不同的概念,并且将它们组合在一起。您可以通过按位操作来提取它们,这是一个痛苦且极易出错的操作,并且很容易出错。
然后他描述了新方法:
但是Swift 2解决了这个问题。它使选项集像集合一样。这意味着选项集和选项集现在都带有方括号。这意味着您将获得带有空方括号的空集,并且将获得与选项集一起使用的全套标准集API。
新语法起作用的原因是因为OptionSetType
符合ArrayLiteralConvertible
协议(通过间接地符合SetAlgebraType
)。该协议允许具有数组init
元素的,使用数组文字初始化符合条件的对象。
在新的Swift 2语法中,[ .UsernameAndPassword, .LogInButton ]
表示包含.UsernameAndPassword
和.LogInButton
选项的选项集。请注意,它看起来就像通过它可以初始化一个普通的老的语法Set
:let intSet: Set<Int> = [ 17, 45 ]
。新语法使您明显地将空选项设置为[]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句