Делегаты отправляют вам сообщения .
Например: если вы используете делегат акселерометра, вы получите сообщения об акселерометре.
Если вы воспользуетесь этим новым делегатом по обнаружению нейтрино, вы получите сообщения о любых нейтрино, обнаруженных в этой области.
Если вы используете всплывающие окна, они отправляют вам сообщения. И способ, которым это сделано, с делегатом PopUp. Есть много, много примеров.
Итак, делегаты отправляют сообщения.
Это так просто.
Вы можете спросить: «ГДЕ он отправляет эти сообщения?»
Ответ таков: он отправляет сообщения туда, где вы установили «.delegate».
Когда вы «устанавливаете делегата», вы говорите, куда вы хотите отправлять сообщения.
Следовательно,
blah.delegate = amazingPlace отправит сообщения "amazingPlace".
blah.delegate =whereElse будет отправлять сообщения в "whereElse ".
blah.delegate = self отправит вам сообщения ...... .
Очень часто вы хотите, чтобы сообщения приходили "вам", поэтому вы просто говорите "blah.delegate = self"
Очень распространенная ошибка - забывать эту строку кода.
Если вы забудете эту строку кода, вы забиты. Сообщения отправляются в никуда , и вы остаетесь чесать голову, пытаясь выяснить, что пошло не так.
Что-то еще, что вам нужно сделать: когда вы используете делегата, вы должны заранее объявить, что вы хотите использовать делегата.
Как это сделать?
В старые времена с целью-c, вы только что сделали это ...
@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
Вы можете видеть, что BigTop хочет использовать двух делегатов, а именно ASIHTTPRequestDelegate и UIPopoverControllerDelegate. Принимая во внимание, что «Flying» хочет использовать только один делегат - он хочет использовать акселерометр.
В Swift это не может быть проще - у вас просто запятая, а не протоколы:
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
Вы действительно не можете сделать много на iPhone без использования делегатов повсюду.
Делегаты используются везде и всегда в iOS.
Совершенно нормально, что класс может использовать дюжину делегатов.
В приведенном выше примере с "Полетом" где-то в коде "Полета" должно быть сказано ...
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
В случае BigTop, он должен был бы установить делегат где-то для ASIHttpRequests,
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
(Не забывайте, что в старые времена с целью-c x.delegate=self
было точно таким же, как [x setDelegate:self]
.)
В настоящее время с Swift вы просто набираете
x.delegate = self
и это все, что нужно.
Так вот, что ты делаешь. Делегаты отправляют сообщения . Вы должны сказать , где вы хотите, чтобы сообщения отправлялись. Как правило, вы хотите, чтобы они обращались к «вам», поэтому в этом случае вы просто говорите x.delegate=self
.
Надеюсь, это поможет.