【问题标题】:Cannot invoke 'append' with an argument list of type '([T.T])'无法使用类型为“([T.T])”的参数列表调用“附加”
【发布时间】:2020-04-26 21:09:20
【问题描述】:
protocol UtimesListResponseProtocol:HandyJSON{
    associatedtype T
    var slide: Int {get set}
    var top: String {get set}
    var bottom: String {get set}
    var hasMore: Bool {get set}
    var list: [T] {get set}

    func add<M:UtimesListResponseProtocol>(data:M)
}
extension UtimesListResponseProtocol{
    mutating func add<T:UtimesListResponseProtocol>(data:T){
        slide = data.slide
        top = data.top
        bottom = data.bottom
        hasMore = data.hasMore
        list.append(data.list)
    }
}

我想在协议中添加一个添加数组的方法,但是好像不行。怎么办,主要是数组中的数据类型也是泛型的,怎么办

【问题讨论】:

  • 因为您的列表是 T 类型,并且您尝试添加 M,删除关联类型,change1 - var list: [UtimesListResponseProtocol] {get set}, change2 - list.append(contentsOf: data.list )

标签: arrays swift list types append


【解决方案1】:

您有 2 个问题:首先,如果要将 Array 附加到另一个,则需要调用 append(contentsOf:)。其次,你需要确保泛型类型参数匹配,因为 Swift 中的Arrays 只能包含相同类型的元素。

extension UtimesListResponseProtocol{
    mutating func add<List:UtimesListResponseProtocol>(data:List) where List.T == T {
        slide = data.slide
        top = data.top
        bottom = data.bottom
        hasMore = data.hasMore
        list.append(contentsOf: data.list)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多