2016-04-18 13 views
3

thisアプリケーションでのステートメントがあります:スウィフト特に閉鎖は、構文

var instanceCount = globalHappinessInstanceCount++ 

Q1。第二のものが達成していない最初の声明は何ですか?

Q2。クロージャ式の後にある中括弧は、空のタプル、イニシャライザ構文、または何を意味していますか?私は最初の声明をどのように読むべきですか?

答えて

1

Q1。第二のものが達成していない最初の声明は何ですか?それ私の知る限り

だけ

Q2 ...任意の値を追加していない不要なクロージャを作成します。クロージャ式の後にある中括弧は、空のタプル、イニシャライザ構文、または何を意味していますか?私は最初の声明をどのように読むべきですか?

メソッドコールです。ただ、

let foo = { globalHappinessInstanceCount++ } 
foo() 

のようなアップデート:私はちょうどあなたのリンクにコードを読む

、クラススコープのコンテキストで、それは異なっています。

class HappinessViewController 
{ 
    var instanceCount = { globalHappinessInstanceCount++ }() 
} 

globalHappinessInstanceCount++

それはそれほど異なるvar instanceCount = globalHappinessInstanceCount++スウィフト3におけるしかし

以上であるの値が割り当てられますinstanceCount: Intプロパティを定義し、++オペレータが変更する可能性がある、削除されますそれはglobalHappinessInstanceCount += 1にあります。しかし、問題は+=の結果のタイプはVoidの代わりにIntです。だからあなたはそれを書く必要があります

class HappinessViewController 
{ 
    var instanceCount: Int = { 
     let instanceCount = globalInstanceCount 
     globalInstanceCount += 1 
     return instanceCount 
    }() 
} 
+0

だからクラスのスコープでさえ、最初のステートメントはまだ不必要なクロージャを使用していますか? –

+0

++が後置されているので、私はdefer {globalHappinessInstanceCount + = 1}する必要があると思います。 –

+0

Swift 3の非推奨++では、Int型指定、遅延ブロック、return文を追加する必要がありました。これは廃止されたオペレータの決定を取り消すよう圧力をかけるのに十分な理由でしょうか? –

関連する問題