ассоциированный тип с ячейкой tableview

У меня есть ячейка tableview (OrderMasterCell) внутри ячейки tableview (NESTED TABLEVIEW)

OrderMasterCell повторно используется в контроллере с несколькими представлениями.

Допустим, ViewController1 имеет табличное представление, а в ячейке табличного представления (VC1Cell) одно табличное представление с ячейкой OrderMasterCell (вложенная таблица)

Допустим, у ViewController2 есть табличное представление, а в ячейке табличного представления (VC2Cell) одно табличное представление с ячейкой OrderMasterCell (вложенная таблица)

Мне нужен пользовательский делегат, который передает didSelectRow делегата от OrderMasterCell до VC1Cell. или VC2Cell

с этим делегатом я хочу передать ячейку либо VC1, либо VC2 в качестве параметра. Для этого я создал следующее

@objc protocol  OrderSubItemTableDelegate:class {
     associatedtype cellType // cell type either vc1 or vc2
     @objc optional func tableViewDidSelectRowAt(object:cellType)
}

и когда я попытался создать

class VC1Cell: UITableViewCell,UITableViewDataSource,UITableViewDelegate {
      weak var delegate:OrderSubItemTableDelegate?

  }

Выдает ошибку времени компиляции

Протокол «OrderSubItemTableDelegate» может использоваться только в качестве общего ограничения, поскольку он имеет требования к Self или связанному типу.

УДАЛИТЬ ВОПРОС

Как создать свойство протокола, которое имеет associatedtype? нравится weak var delegate:OrderSubItemTableDelegate?

Если кто-нибудь может помочь мне решить эту


person Prashant Tukadiya    schedule 28.12.2017    source источник


Ответы (1)


Вы неправильно подтверждаете протокол.

 protocol  OrderSubItemTableDelegate {

     associatedtype cellType // cell type either vc1 or vc2

     static func tableViewDidSelectRowAt(object: cellType)
}

class VCCell1: UITableViewCell ,OrderSubItemTableDelegate {

    typealias cellType = VCCell1

    static func tableViewDidSelectRowAt(object: VCCell1) {

    }

}
person Piyush    schedule 28.12.2017
comment
Пиюш Спасибо за повтор. Но как я могу подтвердить этому делегату. для этого мне нужно что-то вроде weak var delegate:OrderSubItemTableDelegate?, а позже я могу использовать delegate = self Но это показывает ошибку - person Prashant Tukadiya; 28.12.2017
comment
@PrashantTukadiya В этом нет необходимости. вы сообщаете OBJC, как быстро подтвердить протокол, это легко, как показано в примере. См. developer.apple.com/library/content/documentation/Swift/ - person Piyush; 28.12.2017
comment
@PrashantTukadiya получает? - person Piyush; 28.12.2017
comment
Предположим, у меня есть метод в протоколе tableViewDidSelectRowAt Как я могу вызвать этот метод? - person Prashant Tukadiya; 28.12.2017
comment
Я думаю, вы не понимаете мою точку зрения. Как я могу вызвать метод tableViewDidSelectRowAt из другого класса? . То, что вы показали, верно. Вы определили делегата и внедрили его в VCCell1. Но из другого события класса я хочу вызвать функцию, которая находится в протоколе. - person Prashant Tukadiya; 28.12.2017
comment
Для этого мне нужно создать weak var delegate:OrderSubItemTableDelegate, а затем вызвать вот так delegate. tableViewDidSelectRowAtI(cell) - person Prashant Tukadiya; 28.12.2017
comment
Теперь ты изменил свой вопрос, приятель. Опишите еще раз весь сценарий, что вы сделали, чего хотите и откуда. - person Piyush; 28.12.2017
comment
вы хотите вызвать didSelectRowAt indexPath из TableviewController в TableviewCell? - person Piyush; 28.12.2017
comment
Нет, я не изменил вопрос. Но посмотрите, у меня есть два VC, VC1 и VC2, оба имеют tableview. В обеих ячейках табличного представления есть еще одно табличное представление. Итак, я хочу, чтобы дочернее табличное представление было выбрано -> Родительское табличное представление выбрало - person Prashant Tukadiya; 28.12.2017
comment
Поэтому я создал протокол с соответствующим типом для передачи данных из дочерней ячейки таблицы -> родительская ячейка таблицы. Я использовал связанный, чтобы определить, что это ячейка VC1 или ячейка VC2. - person Prashant Tukadiya; 28.12.2017
comment
Однако я решил проблему с типом TableviewCell вместо связанного типа, но мне нужно решение с ассоциированным типом. Спасибо за ваши старания - person Prashant Tukadiya; 28.12.2017