不支持覆盖扩展中的声明 - swift

overriding declarations in extensions is not supported - swift

我为我的问题制作了一个最小的可重现代码。

enum Animal {
    case cat
    case dog
}

protocol AdoptPet {
    func petIs(pet: Animal)
}
class Delegate {
   
}
extension Delegate: AdoptPet {
    func petIs(pet: Animal) {
        print("not implemeted")
    }
}

class Girl: Delegate {
}

extension Girl {
    override func petIs(pet: Animal) { // overriding declarations in extensions is not supported
        print(pet)
    }
}

class PetCenter {
    init () {
       
    }
    func setup(adpoter: Delegate){
        let pet: Animal = .cat
        adpoter.petIs(pet: pet)
    }
}
let petCenter = PetCenter()
let adpoter: Girl = Girl()
petCenter.setup(adpoter: adpoter)

我应该在代码中更改什么才能进行编译?

您需要将函数声明和重写都移到扩展的类型声明中。因此 Delegate 需要在其声明中包含 petIs 实现,并且 Girl 也需要在其主体中覆盖 petIs 函数(使用 override 关键字)而不是在扩展中。

class Delegate: AdoptPet {
   func petIs(pet: Animal) {
        print("not implemeted")
    }
}

class Girl: Delegate {
    override func petIs(pet: Animal) {
        print(pet)
    }
}

class PetCenter {
    init () {
       
    }
    func setup(adopter: Delegate){
        let pet: Animal = .cat
        adopter.petIs(pet: pet)
    }
}

let petCenter = PetCenter()
let adopter = Girl()
petCenter.setup(adopter: adopter) // cat