swift 泛型:找不到数组的追加

swift generics: append not found for array

我第一次尝试使用 swift 泛型:

extension RealmSwift.List where Element == Object {
    // @deprecated use RealmSwift.List<>
    func arrayo<T: Object>() -> [T] {
        var res: [T] = []
        for card in self {
            res.append(card) <- here I got 

No exact matches in call to instance method 'append'

        }
        return res
    }

    convenience init<T: Object>(objects: [T]) {
        self.init()
        for card in objects {
            append(card)
        }
    }
}

什么是一劳永逸地编写此适配器的好方法?

注意 where Element。您可以使用 Element 来引用列表项的类型,因此您不需要设置另一个类型参数 Tcard 的类型为 Element 而不是 T,因此您无法将其添加到 Array<T>。无法保证 TElement 等价,因此编译器不允许这样做。这同样适用于您的方便 init.

extension RealmSwift.List where Element == Object {
    // @deprecated use RealmSwift.List<>
    func arrayo() -> [Element] {
        var res: [Element] = []
        for card in self {
            res.append(card) // Now you are adding an `Element` to the array of `Element` so it will work.
        }
        return res
    }

    convenience init(objects: [Element]) {
        self.init()
        for card in objects {
            append(card)
        }
    }
}

但是泛型在这里并不是很有用,因为您已经将 Element 限制为 Object。所以只有一种可能的类型——你可以让 arrayo() 和 init 直接使用 Object

为了使这个有用做

extension RealmSwift.List where Elemtn: RealmCollectionValue