【发布时间】:2016-06-09 21:59:56
【问题描述】:
通过仅在协议扩展中创建方法,可以定义默认方法。 IE。如果方法没有在类型(结构、类和枚举)中实现,那么调用方法实际上就是调用协议扩展中的方法。
TeamRecord 和PlayoffEligible 是两个协议,通过使用TeamRecord 协议扩展上的类型约束,我将能够在我的扩展实现中使用PlayoffEligible 中的属性minimumWinsForPlayoff。
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)
问题:在符合TeamRecord协议的类型创建的对象中找不到函数isPlayoffEligible
问题:如何调用协议扩展中的方法,该方法采用类型约束,使该方法使用另一个协议的属性
非常感谢您的时间和帮助
【问题讨论】:
-
如果这是您的真实代码,您将遇到麻烦,因为您以两种不同的方式拼写“相同”变量 -
minimunWinsForPlayoff与minimumWinsForPlayoff。 -
@matt,是的,你是对的,我的错。这是一个草率的工作。非常感谢您的详细观察。