@Neckvik

Как создать свои события и вызвать его в Swift?

Пример , Клас "А" и класс "B".
В "А" мы создаем экземпляр "B"
Запускаем например в "B" таймер и когда он закончится произошло событие какое-то "timer and",
а класс "А" подписан на это событие через addTarget.
Вопрос как создать это событие "time end"и как указать в классе "B" что он на него подписан(или имеет) и вызвать его там.

Суть я создаю свой элемент в Xib, через протокол не правильно выкидывать какое-то событие, я хочу что бы можно было подписаться через addtarget или через storybord вынести @IBAction для "time end" для класса B

Как это сделать или куда вообще капать ?
  • Вопрос задан
  • 828 просмотров
Пригласить эксперта
Ответы на вопрос 2
briahas
@briahas
ObjC, Swift, Python
Не уверен что правильно вас понял, но ваш стиль изложения просто выкручивает мозги.

Попробую отсюда:
Пример , Клас "А" и класс "B".
В "А" мы создаем экземпляр "B"
Запускаем например в "B" таймер и когда он закончится произошло событие какое-то "timer and",
а класс "А" подписан на это событие через addTarget.
Вопрос как создать это событие "time end"и как указать в классе "B" что он на него подписан(или имеет) и вызвать его там.

Ну это реализовать просто используя делегаты - объект класса А прописывает себя делегатом объекту класса В при его (объекта В) создании. Далее - когда происходит событие "timer end" вызываем нужный метод делегата.

пример:
class AClass {
    
    var b: BClass

    func timerFinished() {
        print("Ola-la!!!")
    }

    func startB() {
        b = BClass()
        b.delegate = self
        b.start()
    }
}

class BClass {
    
    var delegate: AClass?

    func start() {
        // как пример
        Timer.scheduledTimer(withTimeInterval: 0,
                             repeats: false,
                             block: { self.delegate?.timerFinished() })
    }
}
Ответ написан
SnapSh0t
@SnapSh0t
iOS-Developer
Зачем подписываться на событие через addTarget?

Изучите материал про Observers -> https://www.swiftbysundell.com/posts/observers-in-...

И лишним не будет почитать про RxSwift -> https://habr.com/ru/post/423603/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы