2016-01-22 45 views
3

我在viewController類之外聲明瞭閉包,我在viewController類中創建了一個閉包的變量,但是它顯示了這個閉包缺少的默認初始化程序的錯誤。缺少閉包缺省初始化程序 - swift閉包變量聲明?

我瞭解變量和常量聲明的後果以及聲明時的默認初始化必須分配。但我無法理解什麼可能是我的封閉的默認初始化,我嘗試了一些技巧來解決它,但沒有成功。

這裏是我的關閉聲明

typealias completionBlock = (String) ->() 

,這裏是我的那封,這促使對其進行初始化的變量聲明。

class ViewController: UIViewController { 

    var completionHandler: completionBlock = // What could be the default initializer to this closure 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

我希望在我獲取那些需要傳遞的值時調用此塊,與objective-c外部的completionBlock聲明相同。

+0

只是delcare它作爲'completionBlock'或'completionBlock'(如果你是100%肯定它會被設置) – luk2302

+0

它激發 - 「致命的錯誤:?!意外發現零,同時展開一個可選值',當我試圖打電話 - completionHandler(「完成」) – KiranJasvanee

回答

5

你有3個選項

  • 默認屬性:

    var completionHandler : completionBlock = { _ in } 
    
  • 隱含展開可選的 - 只有做到這一點時,你肯定100%的值永遠不會調用之前設置completionHandler

    var completionHandler: completionBlock! 
    
  • 「常規」 選項

    var completionHandler: completionBlock? 
    
    // later callable via 
    completionHandler?("hi") 
    
+0

感謝Luk,我的問題的答案是您的第一個案例 - 關閉的默認屬性,這正是我想知道的。如果你不介意的話,還有一個幫助運氣的問題,你能讓我知道你從哪裏學到了這麼深的東西嗎?因爲我試圖探索蘋果文件,但到目前爲止我還沒有找到解決方案。 – KiranJasvanee

+0

@KiranJasvanee我沒有在任何地方學過,我開始快速回答迅速的問題和編程。我沒有閱讀過單個教程。在你的情況下,你只需提供一個閉包。封閉的論點並不重要,所以'_',身體應該是空的,沒有身體,就是這樣。 – luk2302

+0

謝謝@ luk2302。讚賞。 – KiranJasvanee

1

我認爲它應該是這樣的?

var completionHandler: completionBlock = { stringValue in 
     // but your code here 
    } 
+1

您好Ismail,我很感謝您的回答。 luk2302給出了我正在尋找的當前答案。我想知道閉包的默認初始化屬性,對於數組它是[],對於int是0. – KiranJasvanee

+0

嗨Ismail,現在它在你的版本後是正確的。 – KiranJasvanee

+0

謝謝基蘭。 – Ismail