【问题标题】:overriding declarations in extensions is not supported - swift不支持在扩展中覆盖声明 - swift
【发布时间】:2021-01-27 11:07:23
【问题描述】:

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

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)

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

【问题讨论】:

标签: swift swift-protocols


【解决方案1】:

您需要将函数的声明和覆盖从扩展移到类型声明中。所以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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2022-01-19
    • 2015-10-04
    • 2018-09-14
    • 2013-06-03
    相关资源
    最近更新 更多