我有一个generic
类,可以初始化为任何类型。我想添加一个带有单个参数的函数,该函数获取的类都是类的泛型类型,并且符合Comparable
协议。类型一致性应该在编译前强制执行。
我想做这样的事情:
class Object<T> {
let value: T!
init (value: T) {
self.value = value
}
func doSomething<U where U: Comparable, U == T>(otherValue: U) {
// do something
}
}
这可能吗?
答案 0 :(得分:4)
不幸的是,没有。您无法在方法中进一步专门化泛型类型 - 您需要为所需的行为添加顶级函数。
这是Array
没有纯myArray.sort()
函数的原因,因为无法保证任何Array
实例的成员都是Comparable
。相反,这个签名有一个顶级函数:
func sort<T : Comparable>(inout array: [T])
您的顶级功能将具有类似的结构:
func doSomething<T: Comparable)(obj: Object<T>, otherValue: T) {
// ...
}
答案 1 :(得分:3)
作为参考,这是可能的,因为 Swift 2.0 :
extension Object where T : Comparable {
func doSomething(otherValue: T) {
// do something
}
}