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

前端之家收集整理的这篇文章主要介绍了在Swift中,这个特定的语法是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试按照一些iOS Swift教程连接到Parse.com

codementor.io tutorial

loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | .Facebook | .Twitter

makeschool tutorial

loginViewController.fields = [.UsernameAndPassword,.LogInButton,.SignUpButton,.PasswordForgotten,.Facebook]

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

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

Chris Lattner在WWDC 2015 Session 106: What’s New in Swift中描述了更改的语法.首先,他描述了旧语法的问题:

The problem is,when you get to the other Syntaxes you end up using,it is a bit less nice. You create an empty-option set with nil — it doesn’t make sense because option sets and optionals are completely different concepts and they’re conflated together. You extract them with bitwise operations,which is a pain and super error-prone,and you can get it wrong easily.

然后他描述了新的方法

But Swift 2 solves this. It makes option sets set-like. That means option sets and sets are now formed with square brackets. That means you get empty sets with an empty set of square brackets,and you get the full set of standard set API to work with option sets.

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

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

猜你在找的Swift相关文章