Проблема с настройкой делегата CABasicAnimation в Swift 3?

Я получаю следующую ошибку

Не удается присвоить значение типа «StarButton» типу «CAAnimationDelegate?»

в последней строке этого блока CABasicAnimation:

 let fillCircle = CABasicAnimation(keyPath: "opacity")
 fillCircle.toValue = 0
 fillCircle.duration = 0.3
 fillCircle.setValue(notFavoriteKey, forKey: starKey)
 fillCircle.delegate = self // this is where the error is thrown

self — это пользовательский класс UIButton. Это не было проблемой в предыдущих версиях Swift... есть предложения по решению?

ОБНОВЛЕНИЕ

Вот загружаемая ссылка на исходный файл класса StarButton для лучшего ознакомления:

https://www.dropbox.com/s/gvc2sky05f4p3au/StarButton.swift?dl=0


person Jared Garcia    schedule 28.07.2016    source источник
comment
Вы уверены, что он соответствует протоколу делегата?   -  person Fogmeister    schedule 29.07.2016
comment
UIButton из Apple Docs (developer.apple.com/library/ios /documentation/UIKit/Reference/) не соответствует CAAnimationDelegate. Вы явно сказали, что ваш подкласс был делегатом? См. stackoverflow.com/questions/24024466/   -  person Doc    schedule 29.07.2016
comment
@Fogmeister хорошо, это часть компонента с открытым исходным кодом, который я схватил, и после изучения файла, похоже, у него нет никаких протоколов ... однако это отлично работало в swift 2.xx   -  person Jared Garcia    schedule 29.07.2016
comment
@Doc хорошо, это часть компонента с открытым исходным кодом, который я схватил, и после изучения файла, похоже, у него нет никаких протоколов .. однако это прекрасно работало в swift 2.xx   -  person Jared Garcia    schedule 29.07.2016
comment
Может быть, Swift 3 сделал приведение протоколов строгим? В любом случае вы все равно должны добавить протокол; если класс поддерживает статус делегата, это должно быть указано в объявлении   -  person Doc    schedule 29.07.2016
comment
как мне добавить протокол? @Док   -  person Jared Garcia    schedule 29.07.2016
comment
Вы можете опубликовать класс StarButton?   -  person Christian Abella    schedule 29.07.2016
comment
Добавление протокола похоже на добавление еще одного суперкласса; если у вас есть что-то вроде class StarButton: UIButton, замените на class StarButton: UIButton, CABasicAnimationDelegate   -  person Doc    schedule 29.07.2016
comment
проверьте обновленный вопрос @ChristianAbella   -  person Jared Garcia    schedule 29.07.2016
comment
проверить обновленный вопрос @Doc   -  person Jared Garcia    schedule 29.07.2016
comment
Просто замените строку class StarButton: UIButton { на class StarButton: UIButton, CAAnimationDelegate {. Вам также может понадобиться импортировать CoreAnimation   -  person Doc    schedule 29.07.2016
comment
что сделал это! ха-ха, вау, это казалось таким тривиальным @Doc   -  person Jared Garcia    schedule 29.07.2016


Ответы (1)


Как упоминалось @Doc в комментариях выше, решение состоит в том, чтобы заменить

class StarButton: UIButton { 

с участием

class StarButton: UIButton, CAAnimationDelegate {

Казалось бы, протокол CAAnimationDelegate больше не подразумевается и должен быть указан явно.

person TenaciousJay    schedule 11.10.2016