Вернуть делегата через функцию?

#ios #swift

#iOS #swift

Вопрос:

Я безуспешно пытаюсь вернуть делегата из класса UIView в другой класс.

У меня есть пользовательский UIView подкласс, который я создал под названием Class1, и внутри него я добавляю другой пользовательский UIView подкласс, у которого есть делегат.

в классе 1:

   func setModuleViewFor(index1:Int,index2:Int, delegating:UIView) 
    {
            let tmodule  = ModuleInput(frame: CGRect(x: 0,y: 0,width: self.frame.size.width,height: self.frame.size.height))
            tmodule.setWithData(index1: index1,index2: index2)
            tmodule.delegate= delegating  //********error
            self.addSubview(tmodule)
  

Что выдает сообщение об ошибке:

не удается присвоить значение типа UIView ModuleInputProtocol

Обычно if ModuleInput находится внутри представления элемента управления, и я делаю :

  tmodule.delegate= self
  

это работает.

Комментарии:

1. Пожалуйста, отредактируйте вопрос, чтобы включить информацию о нескольких протоколах, которые вы прокомментировали в принятом ответе.

Ответ №1:

вы должны установить тип делегирования с помощью ModuleInputProtocol

 func setModuleViewFor(index1:Int,index2:Int, delegating:ModuleInputProtocol) 
        {
                let tmodule  = ModuleInput(frame: CGRect(x: 0,y: 0,width: self.frame.size.width,height: self.frame.size.height))
                tmodule.setWithData(index1: index1,index2: index2)
                tmodule.delegate= delegating  //********error
                self.addSubview(tmodule)
  

и делегирующий параметр должен реализовывать ModuleInputProtocol при вызове метода setModuleViewFor

 add:protocol protocolBase {

}

protocol protocol0:protocolBase {

}

protocol protocol1:protocolBase {

}

protocol protocol2:protocolBase {

}

protocol protocol3:protocolBase {

}

protocol protocol4:protocolBase {

}
  

теперь вы можете написать свою функцию следующим образом

 func setModuleViewFor(index1:Int,index2:Int, delegating:protocolBase)
  

Мой английский очень плохой, пожалуйста, поймите

Комментарии:

1. Спасибо, проблема в том, что это может быть один из 5 видов делегатов, поэтому я хотел передать ему представление, которое напрямую получало бы делегата.

2. вы можете использовать это так: я должен написать больше в ответ