我可以在子类中实现协议的一个功能吗?

May I implement one function of protocol in subclass?

我刚刚修改了它。另一个问题是,如果我想让一个子类继承自BaseParticipant,我可以在子类内部重新实现func performEvent吗? 例如:

class CyclingParticipant: BaseParticipant, Participant
{
init(name: String)
{
    super.init(name: name, preferredEvent: Event.CYCLING)

}

func performEvent(event: Event, distance: Distance) throws
{

}

}

但是编译器说“CyclingParticipant 与协议 Participant 的冗余一致性。

class BaseParticipant: Participant
{
 var name: String
 var preferredEvent: Event
 var raceTime: Int
 var couldNotFinish: Bool
 //var performedEvent: Event
// in swift, the class accepts protocol must impletment all funcs inside protocol

init(name: String, preferredEvent: Event)
{
    self.name = name
    self.preferredEvent = preferredEvent
    self.raceTime = 0
    self.couldNotFinish = false
}

func getName() -> String
{
    return self.name
}

func getPreferredEvent() -> Event
{
    return self.preferredEvent
}

func isDisqualified() -> Bool
{
    return self.couldNotFinish
}

func addTime(addtionalRaceTime:Int) -> Void
{
    self.raceTime += addtionalRaceTime
}

func setCouldNotFinish() -> Void
{
    self.couldNotFinish = true
}
func performEvent(event: Event, distance: Distance) throws -> Int
{
    return 1
}
func getTime() throws
{

}

}

协议参与者代码:

protocol Participant
{
func getName() -> String
func getPreferredEvent() -> Event
func isDisqualified() -> Bool
func performEvent(event: Event,distance: Distance) throws ->Int
func addTime(addtionalRaceTime: Int)
func setCouldNotFinish()
func getTime() throws

}

您缺少协议中列出的 getTime() 函数的实现。另外,你应该 post Piazza 上这样的问题。 :P

[更新以回答改写后的问题]

BaseParticipantclass已经采用了Participant协议,所以CyclingParticipant子class不应该声明自己也采用了,这是导致冗余一致性错误。因为 BaseParticipant 已经是 Participant,所以 BaseParticipant 的任何子 class 也将是 Participant.

变化:

class CyclingParticipant: BaseParticipant, Participant

至:

class CyclingParticipant: BaseParticipant

默认情况下,Swift 协议中声明的所有方法都是必需的。

getTime() 未实现