如何让一个类快速符合协议?

Posted

技术标签:

【中文标题】如何让一个类快速符合协议?【英文标题】:How do I make a class conform to a protocol in swift? 【发布时间】:2014-06-03 20:35:24 【问题描述】:

为了实现委托,我需要使类符合 Swift 中的协议。我该怎么做?

【问题讨论】:

【参考方案1】:
class YourClass: SuperClassIfAny, FirstProtocol, SecondProtocol 

但请注意,某些协议要求您实现委托方法。例如,UITableViewDataSource要求您实施

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!

如果那些不是由符合协议的类实现的,Xcode 会给你一个编译错误(总是检查协议声明,Cmd + Click 会告诉你你必须实现哪些方法)。

【讨论】:

希望它显示一个比“不符合协议”更有用的错误 同意,我实际上花了一些时间试图找出它没有编译的原因。不过,我认为这是一件好事,可以防止您犯愚蠢的错误。如果他们添加了一个更具描述性的错误,那就太酷了:-P【参考方案2】:

Xcode 6 beta 7 略微更改了 UITableViewDataSource 的协议,以在两个必需的实现上匹配以下语法:

6b7 : UITableViewDataSource

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!

与 6b6 相比

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell

主要区别在于 UITableView、NSIndexPath 和 UITableViewCell 不再是 'Implicitly Unwrapped Optionals'

【讨论】:

-1;这并不能远程回答问题。

以上是关于如何让一个类快速符合协议?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断一个 Swift 类是继承自另一个类还是符合协议?

无法将符合协议的 Objective-C 类分配给具有 Swift 协议的属性

如何将符合协议的类声明为参数类型?

如何让我的简单对象符合 Swift 中的 NSManagedObject 和 NSCoding

多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)

Python 接口:从协议到抽象基类