2016-04-18 71 views
3

this應用有以下語句:雨燕具體的閉包語法

var instanceCount = { globalHappinessInstanceCount++ }() 

在試圖瞭解上述聲明我發現,只要我測試過,下面的語句達到同樣的結果:

var instanceCount = globalHappinessInstanceCount++ 

Q1。實現第二個不是的第一個陳述是什麼? Q2302。 ()括號是否遵循閉包表達式表示空元組,初始化語法,或者什麼? I.e應該如何閱讀第一個陳述?

回答

1

Q1。實現第二個不是的第一個陳述是什麼?

據我所知,它只是創造不增加任何價值不必要的封閉...

Q2。 ()括號是否遵循閉包表達式表示空元組,初始化語法,或者什麼? I.e應該如何閱讀第一個陳述?

這是方法調用。就像

let foo = { globalHappinessInstanceCount++ } 
foo() 

更新:

我剛剛看了你的鏈接代碼,在類範圍的情況下,它是不同的。

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

定義屬性instanceCount: Int是那些獲得分配的globalHappinessInstanceCount++

它並不比var instanceCount = globalHappinessInstanceCount++

但是在斯威夫特3太大的不同價值,++運營商將被刪除,您可能需要更改它到globalHappinessInstanceCount += 1。但問題是結果類型+=運算符是Void而不是Int。所以你必須寫它像

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

所以即使在類作用域是第一個語句仍然使用不必要的關閉? –

+0

我認爲我們需要推遲{globalHappinessInstanceCount + = 1},因爲++是後綴。 –

+0

因此,現在對於Swift 3已棄用++,我們需要添加一個:Int類型規範,一個推遲塊和一個return語句。可能這只是爲反對已棄用的運營商決策施加壓力的充分理由? –