gpt4 book ai didi

swift - 比较 Swift 类层次结构中的协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 11:11:34 25 4
gpt4 key购买 nike

我有一个包含 2 个 Swift 类的层次结构,需要它们来实现 Comparable:

class Thing : Comparable {
var name = "Thing"
init(name : String){
self.name = name
}
}

class Thingy: Thing {
override init(name: String){
super.init(name: "Thingy")

}
}
func ==(lhs: Thing, rhs:Thing)->Bool{
return lhs.name == rhs.name
}

为了遵守Comparable,我需要实现这个功能:

func <(lhs: Thing, rhs: Thing) -> Bool{
return lhs.name < rhs.name
}

到目前为止一切顺利,但是如果我需要针对不同子类型的特定 < 函数会发生什么,例如:

func <(lhs: SubThing, rhs: Thing) -> Bool{
return lhs.name < rhs.name
}

我应该怎么做?编译器似乎忽略了这最后的声明。

如果类型倒置,它是否也有效?

lhs: SubThing, rhs: Thing

代替

lhs: Thing, rhs: SubThing

最佳答案

泛型来拯救。使您的 EquatableComparable 函数通用。将 T 约束为 Thing 的子类。

func ==<T:Thing>(lhs: T, rhs:T) -> Bool {
return lhs.name == rhs.name
}


let a = Thing(name: "alpha")
let b = Thingy(name: "beta")

a == b // false

关于swift - 比较 Swift 类层次结构中的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com