TSR
TSR

Reputation: 20386

overriding declarations in extensions is not supported - swift

I made a minimal reproducible code of my issue.

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)

What should I change in the code to make this compile ?

Upvotes: 0

Views: 1104

Answers (1)

David Pasztor
David Pasztor

Reputation: 54706

You need to move both the declaration of the function and the override into the type declarations from extensions. So Delegate needs to contain the petIs implementation in its declaration and Girl needs to override the petIs function in its body as well (using the override keyword) rather than in an extension.

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

Upvotes: 1

Related Questions