Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

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 ?

question from:https://stackoverflow.com/questions/65917866/overriding-declarations-in-extensions-is-not-supported-swift

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...