Невозможно вызвать 'append' со списком аргументов типа '([TT])' - PullRequest
0 голосов
/ 09 января 2020
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)
    }
}

Я хочу добавить метод добавления массивов в протокол, но, похоже, он не работает. Что я должен делать, главным образом потому, что типы данных в массиве также являются обобщенными, что я должен делать

1 Ответ

1 голос
/ 09 января 2020

У вас есть 2 проблемы: во-первых, вам нужно позвонить append(contentsOf:), если вы хотите добавить Array к другому. Во-вторых, вам необходимо убедиться, что параметры типа c generic совпадают, поскольку Array s в Swift может содержать только элементы одного типа.

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)
    }
}
...