#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. вы можете использовать это так: я должен написать больше в ответ