gpt4 book ai didi

ios - 如何使用泛型作为参数?(Swift 2.0)

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:26 25 4
gpt4 key购买 nike

Playground 上的代码在这里

class ProductModel {
var productID : Int = 0
init(id:Int) {
productID = id
}
}


protocol GenericListProtocol {
typealias T = ProductModel
var list : [T] { get set }
var filteredlist : [T] { get set }
func setData(list : [T])
}
extension GenericListProtocol {
func setData(list: [T]) {
list.forEach { item in
guard let productItem = item as? ProductModel else {
return
}
print(productItem.productID)
}
}
}

class testProtocol {
class func myfunc<N:GenericListProtocol>(re:N){
var list : [ProductModel] = [ProductModel(id: 1),ProductModel(id: 2),ProductModel(id: 3),ProductModel(id: 4)]
re.setData(list)
}
}

但是在行 re.setData(list)

获取编译错误:

Cannot convert value of type '[ProductModel]' to expected argument type '[_]'.

我的问题是如何在 GenericListProtocol 中使用 setData 方法?

任何人都可以提供帮助,我们将不胜感激。

最佳答案

ProductModel 类型移动到扩展中并从通用协议(protocol)中删除约束似乎可行。

class ProductModel {
var productID : Int = 0
init(id:Int) {
productID = id
}
}

protocol GenericListProtocol {
typealias T
var list : [T] { get set }
var filteredlist : [T] { get set }
func setData(list : [T])
}

extension GenericListProtocol {
func setData(list: [ProductModel]) {
list.forEach { item in
print(item.productID)
}
}
}

class testProtocol {
class func myfunc<N:GenericListProtocol>(re:N) {
let list : [ProductModel] = [ProductModel(id: 1),ProductModel(id: 2),ProductModel(id: 3),ProductModel(id: 4)]
re.setData(list)
}
}

关于ios - 如何使用泛型作为参数?(Swift 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33717418/

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