我一直在Swift中编写一个应用程序,因此需要编写一个子类UIViewController
并且符合多个协议(包括UIAlertViewDelegate
,UITableViewDelegate
和UITableViewDataSource
)。我目前正在使用Xcode 6 Beta,并且遇到了很多困难。
我遇到的问题源于类声明:
class TableAddition : UIViewController, UIAlertViewDelegate {
似乎编译器没有识别协议,当我尝试实现以下方法时:
@optional func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
}
我收到错误消息“'可选'属性只能应用于协议成员”。虽然删除@optional
会使错误无效,但我不认为该方法被识别为UIAlertViewDelegate
协议的成员(Xcode从未为我自动完成方法实现)。
这是一个源于Swift方面的问题,还是我的错误?
答案 0 :(得分:5)
来自Swift Book中的"Protocols":
可选协议要求
您可以定义协议的可选要求,这些要求 不必由符合协议的类型实现。 可选要求以
@optional
关键字为前缀 协议的定义。
因此@optional
关键字仅在协议定义中用于标记
可选要求。它不与协议方法的实现一起使用。
因此,删除代码中的@optional
是正确的解决方案。
Xcode没有自动完成协议方法似乎是当前的问题 测试版。