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
来引用列表项的类型,因此您不需要设置另一个类型参数 T
。 card
的类型为 Element
而不是 T
,因此您无法将其添加到 Array<T>
。无法保证 T
和 Element
等价,因此编译器不允许这样做。这同样适用于您的方便 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
我第一次尝试使用 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
来引用列表项的类型,因此您不需要设置另一个类型参数 T
。 card
的类型为 Element
而不是 T
,因此您无法将其添加到 Array<T>
。无法保证 T
和 Element
等价,因此编译器不允许这样做。这同样适用于您的方便 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