2017-07-22 49 views
2

我需要一個按需執行的閉包方法。Swift中的可選閉包4

在斯威夫特3我以前做這樣的事情:

// Declare closure 
var checksPerformed: ((Void) -> Void)? // Declaration 

// Call when needed 
checksPerformed?() 

//Only executes when checksPerformed is called 
checksPerformed = { _ in 
    // do stuff here 
} 

在斯威夫特4這不再是這種情況。

enter image description here

和固定這樣的警告後沒有像以前一樣工作。 這樣做的新方法是什麼?

如果我更新聲明:var checksPerformed: (() ->())?我越來越

enter image description here

+0

就更新爲:'VAR checksPerformed:(() - >無效)'或'VAR checksPerformed :(() - >())?'無論哪種方式都很好。我個人避免使用'Void',而不是在適當的地方使用'()'。 – oyalhi

+0

var'checksPerformed:(() - >())?'//聲明 –

+0

@oyalhi我更新了問題 – kernelpanic

回答

0

使用

var checksPerformed: (()->(Void))? 

如果你這樣做,一切都應該按預期工作。

不要分配關閉時使用_在:

//Only executes when checksPerformed is called 
checksPerformed = { 
    // do stuff here 
} 

//Call when needed 
checksPerformed?() 
+0

在最後一段我說過我做過。它沒有工作。我會更新我的原始郵件以包含錯誤。我不能做到這一點:''var checksPerformed:() - >(Void)?''。 「類沒有初始化器」被拋出 – kernelpanic

+0

你必須這樣做(() - >(Void))?這將其聲明爲可選閉包;對不起,在我的組織答案?是問題句子的一部分。 – HixField

+0

更新了答案,使其更加清晰 – HixField