Xcode 在协议扩展中调用默认方法的问题
通过仅在协议扩展中创建方法,可以定义默认方法。也就是说,如果该方法没有在类型(结构、类和枚举)中实现,那么调用该方法实际上是调用协议扩展中的方法Xcode 在协议扩展中调用默认方法的问题,xcode,swift,protocols,Xcode,Swift,Protocols,通过仅在协议扩展中创建方法,可以定义默认方法。也就是说,如果该方法没有在类型(结构、类和枚举)中实现,那么调用该方法实际上是调用协议扩展中的方法 protocol TeamRecord { var wins: Int { get } var losses: Int { get } } protocol PlayoffEligible { var minimumWinsForPlayoff: Int{ get } } extension TeamRecord where
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
和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
协议的类型创建的对象中找不到函数isplayAffiblible
问题:我如何调用协议扩展中的方法,该协议扩展使用了一个类型约束,使得该方法使用另一个协议的属性
非常感谢您的时间和帮助您在结构TeamingGroupa中找不到PlayOffelible扩展方法,因为TeamingGroupa不采用PlayOffelible:
struct TeamInGroupA: TeamRecord {
将协议视为强加某种类型层次结构。如果一个结构采用了一个协议,它就是那个类型。因此,只有当TeamingGroupa“是”一个PlayoffEligible时,TeamingGroupa才会有PlayoffEligible扩展方法。但在您的代码中,它不是
如果您希望TeamingGroupa采用PlayOffelible,您需要明确表示:
struct TeamInGroupA: TeamRecord, PlayoffEligible {
在结构TeamingGroupA中找不到PlayoffEligible扩展方法,因为TeamingGroupA不采用PlayoffEligible:
struct TeamInGroupA: TeamRecord {
将协议视为强加某种类型层次结构。如果一个结构采用了一个协议,它就是那个类型。因此,只有当TeamingGroupa“是”一个PlayoffEligible时,TeamingGroupa才会有PlayoffEligible扩展方法。但在您的代码中,它不是
如果您希望TeamingGroupa采用PlayOffelible,您需要明确表示:
struct TeamInGroupA: TeamRecord, PlayoffEligible {
如果这是你的真实代码,你会遇到麻烦,因为你用两种不同的方式拼写“同一”变量-
minimunWinsForPlayoff
vs.minimumWinsForPlayoff
@matt,是的,是的,你是对的,我的错。这是一个草率的工作。非常感谢您的详细观察。如果这是您的真实代码,您将遇到麻烦,因为您以两种不同的方式拼写“同一”变量-minimunsinsforplayoff
vs.minimumWinsForPlayoff
@matt,是的,您是对的,我的错。这是一个草率的工作。非常感谢你的详细观察。嗨,马特,非常感谢你的解释。我现在更明白了。嗨,马特,非常感谢你的解释。我现在更明白了。