【发布时间】:2014-09-02 19:02:01
【问题描述】:
func getIndex<T: Equatable>(valueToFind: T) -> Int? {...}
mutating func replaceObjectWithObject<T: Equatable>(obj1: T, obj2: T) {
if let index = self.getIndex(obj1) {
self.removeAtIndex(index)
self.insert(obj2, atIndex: index) // Error here: 'T' is not convertible to 'T'
}
}
我有一个假设用另一个元素替换一个元素的功能。但我对Generics 不是很熟悉,也不知道为什么这不起作用。请帮忙。
如果我从 mutating func 中删除 Equatable,则错误消息会跳转到该 func 的第一行,然后如果我将其替换为 func find(),则会出现与第 3 行相同的错误。
【问题讨论】:
-
你能提供
insert方法的实现,或者至少是它的签名吗? -
nvm...我知道了 - 这是一个
Array扩展,不是吗? -
有点相切,但该错误消息令人困惑,因为
Array使用 T 作为其通用子类型。这是说T(此函数的泛型类型)不能转换为T(数组的泛型类型)。如果将方法签名更改为U而不是T会更清晰。