2015-11-23 19 views
6

は私がParse.com、この特定の構文は何を意味しますか?

codementor.io tutorialに接続するためのいくつかのiOSスウィフトのチュートリアルに従うことをしようとしてきた:

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

​​

makeschool tutorialが、私は前者がスイッチ1.1であると仮定し、文脈からは同じことをしているように見えますが、構文の変更に対する言語参照はまだ見つかりませんでした。うんざりしてドット、パイプ、カンマを検索するのは難しいです...誰かが各スニペットの構文を説明できるのでしょうか? (私は言語仕様を読むことに取り組んでいますが、実際にアプリを稼働させるのは面白いでしょう)

答えて

7

:ここでは例from the Swift docsです&および~)を使用してそれらを操作します。したがって、.UsernameAndPassword | .LogInButtonは、.UsernameAndPasswordオプションと.LogInButtonオプションの両方が含まれるオプションセットを意味します。古い構文では、空のオプションセット(オプションは含まれていません)を表すにはnilを使用します。これは、空でないセットの構文に基づいて明らかではありません。

Chris Lattnerは変更された構文をWWDC 2015 Session 106: What's New in Swiftに記述しました。まず、彼は古い構文の問題について説明しています。

問題は、使用し終わる他の構文になったときに問題が発生することです。空のオプションセットをnilで作成します。オプションセットとオプションセットは完全に異なる概念であり、それらは一緒に繋がっているので意味がありません。ビット単位の操作でそれらを抽出します。これは痛みであり、エラーが起こりやすいため、簡単に間違ってしまうことがあります。

それから彼は新しいアプローチについて説明します。

をしかしスウィフト2はこれを解決します。オプションセットをセットにします。これはオプションセットとセットが角括弧で形成されることを意味します。つまり、大括弧で囲まれた空のセットが得られ、オプションセットを扱うための標準セットAPIの完全なセットが得られます。 OptionSetTypeは(SetAlgebraTypeに準拠することで、間接的に)ArrayLiteralConvertibleプロトコルに準拠しているため、新たな構文が働く

理由があります。このプロトコルでは、配列リテラルを使用して、要素のリストを取るinitを持つことによって、適合するオブジェクトを初期化することができます。

新しいSwift 2の構文では、[ .UsernameAndPassword, .LogInButton ]は、.UsernameAndPassword.LogInButtonの両方のオプションを含むオプションセットを表します。これは、普通の古いSetlet intSet: Set<Int> = [ 17, 45 ]を初期化できる構文と似ています。新しい構文では、空のオプションセットを[]として指定することが明らかになりました。

1

スウィフトは、最初の行で使用された垂直バー演算子をサポートしなくなりました。 2番目は、列挙のさまざまなケースを取り、オプションセットとして記述しています。 (あなたは整数型に設定されたオプションを保存し、ビット演算子を使用し|と:古いスウィフト1構文はあなたがCとObjective-Cでオプションセットを扱う方法に基づいています

enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 

directionToHead = .South 

switch directionToHead { 
case .North: 
    print("Lots of planets have a north") 
case .South: 
    print("Watch out for penguins") 
case .East: 
    print("Where the sun rises") 
case .West: 
    print("Where the skies are blue") 
} 

// prints "Watch out for penguins" 
+0

"2つ目は、列挙のさまざまなケースを取り入れ、それらを配列に入れることです。いいえ、2番目は最初のものの代わりです。 – NobodyNada

+0

@NobodyNadaはい、どちらも同じことです - 列挙型のケースの集合を記述します。 – tylersimko

+2

の種類が、それはオプションが設定され、ない配列です。 – NobodyNada

関連する問題