2015-03-21 2 views
1

Я много разбираюсь в том, что означает делегат, но почему-то мое понимание не соответствует этому объяснению. Это из учебника:Объяснение Swift Delegate (contactDelegate)

physicsWorld.contactDelegate = self 

и это его объяснение: «Это создает физический мир, не имеет сил тяжести, и устанавливает сцену в качестве делегата, чтобы получать уведомления, когда два физика тел сталкиваются

Я думал, что делегат - это просто класс, который использует протокол. У кого-то есть другое объяснение? что именно эта линия делает? Благодарю. (игнорировать гравитационный часть, есть еще одна строка кода)

ответ

0

Делегат является протокол, также иногда называемый «протокол» делегат. Класс, содержащий указанную строку кода , становится делегатом и получает сообщения от протокола. physicsWorld свяжется со своим делегатом, чтобы сообщить ему о столкновении. Если методы делегата реализованы (т. Е. Контроллер соответствует протоколу делегата), он может принять соответствующие меры, когда он будет уведомлен.

Очистить?

0

Согласно Свифта документации для PhysicsWorld class:

contactDelegate недвижимости

делегат, который вызывается, когда два физика тела вступают в контакт с друг друга.

Поэтому, когда мы видим строку:

physicsWorld.contactDelegate = self 

Мы устанавливаем свойство contactDelegate на экземпляре physicsWorld так, что, когда два объекта физики сталкиваются некоторые метод будет вызываться, т.е. делегата.

При назначении self мы делегируем ответственность за реагирование на столкновения физических объектов с классом (GameScene).

override func didMoveToView(view: SKView) 

Поскольку мы перекрывая этот метод в классе GameScene, который наследует от класса SKScene мы, по сути говоря:

«Не использовать SKScene didMoveToView() использовать данную GameScene версию didMoveToView()» (потому что сам относится к классу GameScene).

Значит, функция «didBeginContact()» является делегатом? и contactDelegate всегда должен быть классом, который собирается реализовать функцию doBeginContact() (или любую другую функцию из протокола делегата)?

Я предполагаю, что метод didBeginContact() вызывает метод, заданный свойством contactDelegate.

В Java нет делегатов.Делегат подобен переменной, за исключением того, что хранит метод. Вы можете использовать эту переменную, чтобы вызвать метод. (Если вы знаете какой-то C, это указатель на функцию)

This помог мне понять делегатов, когда я впервые встретил их.

+0

Я предполагаю, что это слово делегат подходит ко мне. Я действительно ненавижу соглашение об именах Свифта, особенно для методов. Итак, функция «didBeginContact()» является делегатом? и contactDelegate всегда должен быть классом, который собирается реализовать функцию doBeginContact() (или любую другую функцию из протокола делегата)? и, наконец, есть ли эквивалентное слово для делегата в java или любых языках семейства C? – user3758745

Смежные вопросы