У меня есть собственный подкласс UIView. У него есть распознаватель жестов панорамирования, который я установил как обязательную константу:
let dragger: UIPanGestureRecognizer
Это константа, потому что она создается один раз при инициализации представления и сохраняется в течение всего времени существования представления.
В назначенном инициализаторе представления init(coder)
я хочу создать распознаватель жестов панорамирования и подключить его. Однако в Xcode 6.3 мне кажется, что я не могу этого сделать, если распознаватель жестов является константой. (Это кажется проблемой только в бета-версии Xcode 6.3. Код позволяет мне установить инициализатор жестов панорамирования после вызова super.init(coder)
)
Поскольку переменная является обязательной константой, ее необходимо настроить, прежде чем я вызову суперкласс init(coder)
. Однако единственный инициализатор для распознавателя жестов панорамирования принимает в качестве параметра себя. Я не доступен, пока я не позвоню super.init(coder)
.
Итак, я не могу создать распознаватель жестов с вызовом UIPanGestureRecognizer(target:action:)
перед вызовом super.init(coder)
, потому что мне нужно передать себя этому инициализатору жестов панорамирования,
... и я не могу вызвать UIPanGestureRecognizer(target:action:)
ПОСЛЕ вызова super.init(coder)
, потому что я должен установить значения для всех необходимых констант / переменных перед вызовом инициализатора суперкласса.
Единственное решение, которое я могу придумать, - сделать мой распознаватель жестов необязательной переменной var, чего я бы предпочел не делать. Он всегда будет иметь значение после завершения инициализатора, и необходимость разворачивать необязательный элемент каждый раз, когда я его использую, раздражает.
Я что-то упустил?
super.init(coder)
? Я предполагаю, что это сработает, но в документации для распознавателей жестов указано, чтоUIPanGestureRecognizer(target:action:)
является назначенным инициализатором, и вы должны вызывать назначенный инициализатор. - person Duncan C   schedule 06.04.2015UIPanGestureRecognizer()
с последующим добавлением цели / действия после вызова инициализатора суперкласса - единственное, что я нашел, что позволяет мне сохранить его как требуемую константу (let). Разместите свое предложение в качестве ответа, и я его приму. - person Duncan C   schedule 06.04.2015