2014-07-11 44 views
4

我在斯威夫特已經寫一個應用程序,並作爲一個結果,需要編寫兩個子類UIViewController,符合多種協議(包括UIAlertViewDelegateUITableViewDelegate類,和UITableViewDataSource)。我目前正在使用Xcode 6 Beta,並且遇到了很多困難。有一個雨燕類的行爲既是一個UIViewController子類和的UITableViewDelegate

我遇到的問題,從類聲明莖:

class TableAddition : UIViewController, UIAlertViewDelegate { 

看來,編譯器是不承認的協議,當我嘗試實現以下方法:

@optional func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) { 

} 

我收到一個錯誤,提示「'可選'屬性只能應用於協議成員」。雖然刪除@optional會使錯誤無效,但我不相信該方法被認爲是UIAlertViewDelegate協議的成員(Xcode從未自動完成了我的方法實現)。

這是一個起源於Swift方面的問題,還是這是我的錯誤?

回答

5

"Protocols"在斯威夫特書:

任擇議定書要求

您可以定義協議的可選的要求,這些要求 不必由符合協議類型來實現。 可選要求的前綴爲@optional關鍵字,作爲協議定義的一部分 。

所以@optional關鍵字僅應用於協議定義標記 可選的要求。它不與協議方法的一起使用。 因此,在您的代碼中刪除@optional是正確的解決方案。

Xcode不自動完成協議方法似乎是目前的 beta版本的問題。