在protocal扩展中调用默认方法的问题

时间:2016-06-09 13:50:45

标签: xcode swift protocols

通过仅在协议扩展中创建方法,可以定义默认方法。即如果方法没有在类型(Structure,Class和Enum)中实现,那么调用该方法实际上是调用协议扩展中的方法。

TeamRecordPlayoffEligible是两个协议,通过在TeamRecord的协议扩展上使用类型约束,我将能够使用{{1}中的属性minimumWinsForPlayoff在我的扩展程序的实现中。

PlayoffEligible

问题:我找不到符合protocol TeamRecord { var wins: Int { get } var losses: Int { get } } protocol PlayoffEligible { var minimumWinsForPlayoff: Int{ get } } extension TeamRecord where Self: PlayoffEligible { func isPlayoffEligible() -> Bool { return self.wins > minimumWinsForPlayoff } } struct TeamInGroupA: TeamRecord{ var wins: Int var losses: Int var minimunWinsForPlayoff: Int } let BasketBallLA = TeamInGroupA(wins: 19, losses: 20, minimunWinsForPlayoff: 10) 协议的类型所创建的对象内的函数isPlayoffEligible

enter image description here

问题:如何调用协议扩展中的方法,该方法使用类型约束,该方法使用来自其他协议的属性

非常感谢你的时间和帮助

1 个答案:

答案 0 :(得分:2)

您在struct TeamInGroupA中找不到PlayoffEligible扩展方法,因为TeamInGroupA不采用PlayoffEligible:

struct TeamInGroupA: TeamRecord {

将协议视为强加一种类型层次结构。如果一个struct采用一个协议,它就是那个类型。因此,仅当TeamInGroupA“是”PlayoffEligible时,TeamInGroupA才会有PlayoffEligible扩展方法。但是在你的代码中,它不是。

如果您希望TeamInGroupA采用PlayoffEligible,您需要明确说明:

struct TeamInGroupA: TeamRecord, PlayoffEligible {