Objective-C-də nümayəndələri necə yaratmaq olar?

Mən nümayəndələrin necə işlədiyini bilirəm və mən onları necə istifadə edə biləcəyimi bilirəm.

Amma bunları necə yarada bilərəm?

661
09 марта '09 в 19:06 2009-03-09 19:06 Andy Jacobs tərəfindən təyin olundu 09 Mart 09:06 'da 19:06 2009-03-09 19:06
@ 18 cavab

Bir Objective-C üzvü, delegate əmlakının başqa bir obyektə verildiyi bir obyektdir. Bunu yaratmaq üçün, sadəcə, sizləri maraqlandıran nümayəndənin metodlarını həyata keçirən bir sinif müəyyənləşdirir və bu sinfi nümayəndə protokolunun tətbiqi kimi qeyd edir.

Məsələn, bir UIWebView . WebViewDidStartLoad: delegate metodunuzu həyata keçirmək istəyirsinizsə, bu sinfi yarada bilərsiniz:

 @interface MyClass<UIWebViewDelegate> // ... @end @implementation MyClass - (void)webViewDidStartLoad:(UIWebView *)webView { // ... } @end 

Daha sonra MyClass bir örneğini yaratmaq və onu veb görünüşünün nümayəndə kimi təyin edə bilərsiniz:

 MyClass *instanceOfMyClass = [[MyClass alloc] init]; myWebView.delegate = instanceOfMyClass; 

UIWebView tərəfində, yəqin ki, nümayəndənin webViewDidStartLoad: istifadə mesajına cavab verdiyini görmək üçün bu cür oxşar bir kodu var və lazım olduqda göndərin.

 if([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { [self.delegate webViewDidStartLoad:self]; } 

Delege mülkiyyəti adətən weak olaraq elan edilir və ya qorunma dövründən qaçmaq üçün (əvvəlcədən ARC) assign olunur, çünki obyektin nümayəndəsi tez-tez bu obyektə güclü istinad edir. (Məsələn, görünüşü nəzarətçi tez-tez ehtiva edən görünüşün nümayəndəsini təşkil edir.)

Dərsləriniz üçün nümayəndələri yaratmaq

Öz nümayəndələrinizi müəyyən etmək üçün, Apple Protokollarında təsvir olunduğu kimi, onların üsullarını bir yerə elan etməlisiniz . Adətən rəsmi protokolu elan edirsiniz. UIWebView.h-dən köçürülən reklam bu kimi görünür:

 @protocol UIWebViewDelegate <NSObject> @optional - (void)webViewDidStartLoad:(UIWebView *)webView; // ... other methods here @end 

Bu, interfeys və ya abstrakt baz sinifinə bənzəyir, çünki bu halda UIWebViewDelegate nümayəndəsi üçün xüsusi bir növü yaranır. Delege geliştiriciler bu protokolu qəbul etməlidirlər:

 @interface MyClass <UIWebViewDelegate> // ... @end 

Və protokoldakı üsulları tətbiq edin. Protokolda @optional (ən çox nümayəndə metodları kimi) elan edilmiş üsullar üçün, @optional əlaqə @optional xüsusi bir üsul çağırmadan əvvəl.

Adlandırma

Heyət üsulları adətən heyət sinifinin adından başlayan adlar və ilk parametr kimi nümayəndə verən obyekti qəbul edir. Onlar da tez-tez istifadə, məcburi və ya sadə formada istifadə edirlər. Beləliklə, webViewDidStartLoad: (ilk parametr bir web görünüşüdür), loadStarted deyil (hər hansı bir parametr olmadan).

Sürətin optimallaşdırılması

Bir delegenin göndərmək istədiyimiz hər dəfə bir seçiciyə cavab vermədiyini yoxlamaq yerinə, nümayəndələri təyin edildikdə bu məlumatı önləyin. Bunu etmək üçün bir çox təmiz yol aşağıda göstərildiyi kimi bir qutu istifadə etməkdir:

 @protocol SomethingDelegate <NSObject> @optional - (void)something:(id)something didFinishLoadingItem:(id)item; - (void)something:(id)something didFailWithError:(NSError *)error; @end @interface Something : NSObject @property (nonatomic, weak) id <SomethingDelegate> delegate; @end @implementation Something { struct { unsigned int didFinishLoadingItem:1; unsigned int didFailWithError:1; } delegateRespondsTo; } @synthesize delegate; - (void)setDelegate:(id <SomethingDelegate>)aDelegate { if (delegate != aDelegate) { delegate = aDelegate; delegateRespondsTo.didFinishLoadingItem = [delegate respondsToSelector:@selector(something:didFinishLoadingItem:)]; delegateRespondsTo.didFailWithError = [delegate respondsToSelector:@selector(something:didFailWithError:)]; } } @end 

Bədənimizdə, delegateRespondsTo -respondsToSelector: delegateRespondsTo quruluşuna, təkrar-təkrar cavab vermək yerinə, mesaj göndərdiyini təsdiq edə bilərik.

Qeyri-rəsmi nümayəndələr

Protokolların mövcud olmasından əvvəl, NSObject kateqoriyasında bir nümayəndənin tətbiq edə biləcəyi metodları elan etmək üçün istifadə etmək ümumi idi. Məsələn, CALayer hələ də bunu edir:

 @interface NSObject(CALayerDelegate) - (void)displayLayer:(CALayer *)layer; // ... other methods here @end 

Bu, əsasən, hər hansı bir obyektin displayLayer: tətbiq edə biləcəyini displayLayer:

Daha sonra eyni üsuldan istifadə -respondsToSelector: - bu metodu zəng etmək üçün, yuxarıda təsvir edildiyi kimi -respondsToSelector: Deleqlər sadəcə bu metodu həyata keçirir və delegate əmlakını təyin edirlər və bunun (protokolla uyğun olduğunuzu bəyan etmir). Bu metod Apple kitabxanalarında geniş yayılmışdır, lakin yeni kod yuxarıda göstərilən protokola daha qabaqcıl yanaşmanı istifadə etməlidir, çünki bu yanaşma NSObject (bu, daha az faydalı NSObject edən) çirkləndirir və kompilyator tipos və digər səhvlər barədə sizi xəbərdar etməsini çətinləşdirir.

830
09 марта '09 в 19:16 2009-03-09 19:16 Cavab Jesse Rusak tərəfindən 09 mart 09: 09-da 19:16, 2009-03-09 19:16

Təsdiq edilən cavab böyükdür, amma 1 dəqiqəlik cavab axtarırsınızsa, aşağıdakıları cəhd edin:

MyClass.h bu kimi olmalıdır (şərh ilə nümayəndə xətlərini əlavə edin!)

 #import <BlaClass/BlaClass.h> @class MyClass; //define class, so protocol can see MyClass @protocol MyClassDelegate <NSObject> //define delegate protocol - (void) myClassDelegateMethod: (MyClass *) sender; //define delegate method to be implemented within another class @end //end protocol @interface MyClass : NSObject { } @property (nonatomic, weak) id <MyClassDelegate> delegate; //define MyClassDelegate as delegate @end 

MyClass.m bu kimi olmalıdır:

 #import "MyClass.h" @implementation MyClass @synthesize delegate; //synthesise MyClassDelegate delegate - (void) myMethodToDoStuff { [self.delegate myClassDelegateMethod:self]; //this will call the method implemented in your other class } @end 

Başqa bir sinifdə nümayəndəliyi istifadə etmək (bu halda MyVC adlı UIViewController) MyVC.h:

border=0
 #import "MyClass.h" @interface MyVC:UIViewController <MyClassDelegate> { //make it a delegate for MyClassDelegate } 

MyVC.m:

 myClass.delegate = self; //set its delegate to self somewhere 

Nümayəndə heyətinin metodunu həyata keçirir

 - (void) myClassDelegateMethod: (MyClass *) sender { NSLog(@"Delegates are great!"); } 
353
30 сент. Cavab Tibidabo Sep 30 verilir 2012-09-30 13:25 '12 at 13:25 2012-09-30 13:25

Delege dəstək yaratmaq üçün rəsmi protokol metodundan istifadə edərkən, mən sizə aşağıdakı kimi bir şey əlavə edərək düzgün tipli yoxlama (vaxtını tərtib etmirəm, baxmayaraq) təmin edə biləcəyini tapdım:

 if (![delegate conformsToProtocol:@protocol(MyDelegate)]) { [NSException raise:@"MyDelegate Exception" format:@"Parameter does not conform to MyDelegate protocol at line %d", (int)__LINE__]; } 

nümayəndə kodunuzda (setDelegate). Bu, səhvləri minimuma endirmək üçün kömək edir.

18
04 мая '10 в 23:42 2010-05-04 23:42 Cavab verilir umop 04 May '10 at 23:42 2010-05-04 23:42

Xahiş edirik! IOS-da nümayəndələrin necə işlədiyini anlamaq üçün aşağıda göstərilən sadə addım-addım təlimçisini nəzərdən keçirin.

İOS-da nümayəndə

İki ViewControl yaratdıq (birindən digərinə məlumat göndərmək üçün)

  • FirstViewController nümayəndələri (məlumatları təmin edən) həyata keçirir.
  • The SecondViewController delegeyi (məlumatları alacaq) bəyan edir.
17
27 февр. Cavab 27 Fevralda SwiftBoy tərəfindən verildi 2013-02-27 15:21 '13 'da 15:21' də 2013-02-27 15:21

Bəlkə də bu sizin itkin düşdüyünüz kimi daha çoxdur:

C ++-dan başlayaraq, məsələn, baxımından başlasanız, nümayəndələr bir az istifadə edirlər - lakin əsasən "onlar yalnız işləyirlər".

Necə işləyirsə, bir NSWindow üçün nümayəndə kimi yazdığınız bir obyekt qoyursunuz, ancaq obyektiniz yalnız bir çox və ya bir çox mümkün nümayəndəlik üsulları üçün tətbiqlər (metodlar) var. Beləliklə, bir şey olur və NSWindow sizin obyektinizə zəng etmək istəyir - obyektin bu üsulu çağırmaq istədiklərini və sonra onu çağırır və NSWindow etmək üçün Objective-c metodu NSWindow istifadə edir. Objektiv-c işləri necədir - tələb olunan axtarış metodları.

Öz obyektlərinizlə bunu etmək tamamilə əhəmiyyətsizdir, məsələn, 27 obyektdən ibarət olan NSArray , bütün müxtəlif növ obyektlərdən istifadə edə bilərsiniz, yalnız 18-i bir üsul var -(void)setToBue; Qalan 9 deyil. Beləliklə, etmək lazımdır ki, bütün 18 setToBlue üçün bu kimi bir şey:

 for (id anObject in myArray) { if ([anObject respondsToSelector:@selector(@"setToBlue")]) [anObject setToBlue]; } 

MyClass dealloc haqqında başqa bir şey onlar xilas olmur, belə ki, həmişə MyClass dealloc bir nümayəndə nil təyin MyClass dealloc .

16
10 марта '09 в 3:18 2009-03-10 03:18 Tom Andersenə 10.03.2009 tarixində 3:18 'də cavab verən 2009-03-10 03:18

Apple tərəfindən tövsiyə edilən yaxşı bir təcrübə olaraq, NSObject protokoluna əməl etmək üçün nümayəndə heyəti (müəyyənləşdirilmiş protokolu) yaxşıdır.

 @protocol MyDelegate <NSObject> ... @end 

nümayəndəiniz daxilində isteğe bağlı üsullar yaratmaq üçün (yəni, mütləq yerinə yetirilməməsi lazım olan üsullar), @optional şərhini aşağıdakı kimi istifadə edə bilərsiniz:

 @protocol MyDelegate <NSObject> ... ... // Declaration for Methods that 'must' be implemented' ... ... @optional ... // Declaration for Methods that 'need not necessarily' be implemented by the class conforming to your delegate ... @end 

Buna görə də, isteğe bağlı olaraq belirttiğiniz metodları kullanırken, görünüş (temsilcinize tekabül edən), həqiqətən, əlavə metodunuzu respondsToSelector ya da respondsToSelector kontrol respondsToSelector üçün (sınıfınızda) ehtiyac respondsToSelector .

15
04 авг. Cavab Jean 04 aug verilir . 2013-08-04 11:39 '13 at 11:39 2013-08-04 11:39

Bilirsiniz ki, bütün bu cavablar nümayəndələri başa düşdüyünüz zaman çox məna verir. Şəxsən mən C / C + + torpaqlarından və Fortran, və s. Kimi prosessual dillərdən əvvəl gəldim. Burada C ++ paradiqmasında oxşar analoqları tapmaq üçün 2 dəqiqəlik cəhdim var.

Delegere bir C ++ / Java proqramçıya izah edərsəm deyərdim

Deludanlar nədir? Bunlar başqa bir sinif içərisində olan siniflərə statik göstəricilərdir. Göstərici təyin etdikdən sonra, bu sinifdə funksiyaları / üsulları zəng edə bilərsiniz. Nəticə olaraq, sizin sinifinizin bəzi funksiyaları başqa bir sinifə ("C ++" dünyasında, sinif obyektinə göstərici göstəricisinə) göndərilmişdir.

Protokol nədir? Konseptual olaraq, bir delegate sinifi olaraq təyin etdiyiniz bir sinif başlığı faylına bənzər bir məqsəd olaraq xidmət edir. Protokol, göstəricisi sinifdə nümayəndə kimi təyin edilmiş bir sinifdə hansı metodların həyata keçirilməsinin müəyyənləşdirilməsinin açıq bir üsuludur.

C ++-da necə bir şey edə bilərəm? Bunu C ++ olaraq etməyə çalışarsanız, sinif tanımında siniflərə (obyektlərə) dair göstəriciləri təyin etməli və sonra onları əsas sinifə nümayəndə kimi əlavə funksiyaları təmin edəcək digər siniflərə qoşmalıyıq. Ancaq bu kabellər kodda edilməli və səhvən və səhvən olmalıdır. C Objective proqramçıları bu azalma ən yaxşı dəstək və kompleksi təmin etmək üçün kompüter məhdudiyyətlər təmin edir.

9
19 июня '13 в 13:34 2013-06-19 13:34 Cavab DrBug tərəfindən 19 iyun '13' də 13:34 2013-06-19 13:34 'də verilir

Tez versiya

Bir nümayəndə yalnız başqa bir sinif üçün bəzi işlər görən bir sinifdir. Aşağıdakı kodu, Swift'da bunun necə aparıldığını göstərən sahələrdə oynayan bir neçə axmaq (lakin inşallah aydınlaşdırıcı) nümunələri üçün oxuyun.

 // A protocol is just a list of methods (and/or properties) that must // be used by any class that adopts the protocol. protocol OlderSiblingDelegate: class { // This protocol only defines one required method func getYourNiceOlderSiblingAGlassOfWater() -> String } class BossyBigBrother { // The delegate is the BossyBigBrother slave. This position can // be assigned later to whoever is available (and conforms to the // protocol). weak var delegate: OlderSiblingDelegate? func tellSomebodyToGetMeSomeWater() -> String? { // The delegate is optional because there might not be anyone // nearby to boss around. return delegate?.getYourNiceOlderSiblingAGlassOfWater() } } // PoorLittleSister conforms to the OlderSiblingDelegate protocol class PoorLittleSister: OlderSiblingDelegate { // This method is repquired by the protocol, but the protocol said // nothing about how it needs to be implemented. func getYourNiceOlderSiblingAGlassOfWater() -> String { return "Go get it yourself!" } } // initialize the classes let bigBro = BossyBigBrother() let lilSis = PoorLittleSister() // Set the delegate // bigBro could boss around anyone who conforms to the // OlderSiblingDelegate protocol, but since lilSis is here, // she is the unlucky choice. bigBro.delegate = lilSis // Because the delegate is set, there is a class to do bigBro work for him. // bigBro tells lilSis to get him some water. if let replyFromLilSis = bigBro.tellSomebodyToGetMeSomeWater() { print(replyFromLilSis) // "Go get it yourself!" } 

Fəlsəfə praktikasında nümayəndələri tez-tez aşağıdakı hallarda istifadə olunur.

  • Bir sinif başqa bir sinifə bəzi məlumatlar keçirməlidir
  • Bir sinif başqa bir sinifə fərdiləşdirməyə icazə vermək istəyir

Sınıfların bir-birinə aid olan hər şeyi əvvəlcədən bilməsi tələb olunmur, istisna olmaqla, nümayəndə sinfi tələb olunan protokola uyğun gəlir.

Aşağıdakı iki məqaləni oxumağa gəlirəm. Mənə nümayəndələri daha sənədləşmədən daha yaxşı başa düşməyə kömək etdi.

8
05 нояб. Cavab Suragch 05 noyabr tarixində verilir. 2015-11-05 20:11 '15 'də 20:11' də, 2015-11-05 20:11

inkişaf etdiyiniz bir sinif olduğunuzu və bir hadisə meydana gəldiyi zaman bunu bildirə biləcəyi üçün nümayəndə xüsusiyyətini bəyan etmək istədiyini söyləyə bilərsiniz:

 @class myClass; @protocol myClassDelegate <NSObject> -(void)myClass:(MyClass*)myObject requiredEventHandlerWithParameter:(ParamType*)param; @optional -(void)myClass:(MyClass*)myObject optionalEventHandlerWithParameter:(ParamType*)param; @end @interface MyClass : NSObject @property(nonatomic,weak)id< MyClassDelegate> delegate; @end 

Buna görə də, protokolun MyClass başlıq faylında (və ya ayrı bir üstbilgi faylında) MyClass və nümayəndənizin mütləq yerinə yetirməli / etməsi lazım olan / lazımlı hadisə işləyicilərini elan MyClass , sonra MyClass tipində ( id< MyClassDelegate> ) bir əmlak elan id< MyClassDelegate> , müvafiq protokol MyClassDelegate , bu qorunması dövrü qarşısını almaq üçün çox vacibdir, nümayəndə əmlak zəif elan olduğunu görəcəksiniz (tez-tez nümayəndə surətini saxlayır MyClass bir nümayəndə xilas elan əgər belə, onlar həm də saxlamaq və s. ) G digər və onların heç biri azad olmaz.

protokol üsullarının MyClass nümunəsini MyClass parametr kimi MyClass , bu, nümayəndə, MyClass nüsxəsində bəzi üsulları çağırmaq istəyirsə ən yaxşı təcrübədir və həmçinin, məsələn, nümayəndənin MyClassDelegate kimi bir neçə MyClass nümunəsi üçün elan etdiyi zaman, məsələn, UITableView's birdən çox nümunəsi ViewController və özlərini UITableViewDelegate kimi bəyan edir.

MyClass içərisində, nümayəndə heyətini elan edilən hadisələrlə belə izah edirsiniz:

 if([_delegate respondsToSelector:@selector(myClass: requiredEventHandlerWithParameter:)]) { [_delegate myClass:self requiredEventHandlerWithParameter:(ParamType*)param]; } 

birincisi, nümayəndə heyətinizin həyata keçirmədiyi və protokolun çökməsi (bir protokol üsulu tələb olunsa belə), zəng edəcək olduğunuz protokol üsuluna cavabdeh olub olmadığını yoxlayın.

8
08 апр. cavab m.eldehairy 08 apr tərəfindən verilir . 2015-04-08 16:24 '15 at 16:24 2015-04-08 16:24

Bəli, həqiqətən bu sualın cavabı deyil, amma əgər nümayəndə heyətinizi necə qurmağa baxarsanız, bəlkə də, daha asan bir şey sizin üçün ən yaxşı cavab ola bilər.

Mən nadir hallarda onlara ehtiyac duyduğum üçün nümayəndələri dərk etmirəm. Nümayəndə heyəti üçün yalnız bir nümayəndə ola bilərəm. Buna görə də, nümayəndənizin məlumat ötürülməsi / ötürülmə metodlarından biri olmasını istəyirsinizsə, bildirişlərdən daha yaxşıdır.

NSNotification obyektləri birdən çox alıcıya ötürə bilər və istifadə etmək çox asandır. Aşağıdakı kimi işləyir:

MyClass.m bu kimi olmalıdır:

 #import "MyClass.h" @implementation MyClass - (void) myMethodToDoStuff { //this will post a notification with myClassData (NSArray in this case) in its userInfo dict and self as an object [[NSNotificationCenter defaultCenter] postNotificationName:@"myClassUpdatedData" object:self userInfo:[NSDictionary dictionaryWithObject:selectedLocation[@"myClassData"] forKey:@"myClassData"]]; } @end 

Bildirişinizi digər dərslərdən istifadə etmək üçün: Bir sinif müşahidəçi kimi əlavə edin:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(otherClassUpdatedItsData:) name:@"myClassUpdatedData" object:nil]; 

Gömme seçicisi:

 - (void) otherClassUpdatedItsData:(NSNotification *)note { NSLog(@"*** Other class updated its data ***"); MyClass *otherClass = [note object]; //the object itself, you can call back any selector if you want NSArray *otherClassData = [note userInfo][@"myClassData"]; //get myClass data object and do whatever you want with it } 

Sınıfınızı bir müşahidəçi olaraq qaldırmayı unutmayın

 - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } 
7
17 июля '13 в 7:58 2013-07-17 07:58 Cavab Tibidabo tərəfindən 17 iyul 'da 07:58' də verilir 2013-07-17 07:58

Burada nümayəndə yaratmaq üçün asan bir yoldur.

.H faylında bir protokol yaradın. Protokolun qarşısında @ klass istifadə edərək, UIViewController < As the protocol I am going to use is UIViewController class>. adı ilə müəyyən olunduğundan əmin olun < As the protocol I am going to use is UIViewController class>.

Addım 1: UIViewController sinifinin bir alt sinifi olan "YourViewController" adlı yeni bir sərin protokol yaradın və bu sinifi ikinci ViewController'a təyin edəcəyik.

Addım 2: "YourViewController" faylına gedin və aşağıda göstərildiyi kimi dəyişdirin:

 #import <UIKit/UIkit.h> @class YourViewController; @protocol YourViewController Delegate <NSObject> @optional -(void)defineDelegateMethodName: (YourViewController *) controller; @required -(BOOL)delegateMethodReturningBool: (YourViewController *) controller; @end @interface YourViewController : UIViewController //Since the property for the protocol could be of any class, then it will be marked as a type of id. @property (nonatomic, weak) id< YourViewController Delegate> delegate; @end 

Protokol davranışında müəyyən edilmiş üsullar, protokol tanımının bir hissəsi kimi @ custom və @required istifadə edilə bilər.

Addım 3: İcraçı İcra

  #import "delegate.h" @interface YourDelegateUser () <YourViewControllerDelegate> @end @implementation YourDelegateUser - (void) variousFoo { YourViewController *controller = [[YourViewController alloc] init]; controller.delegate = self; } -(void)defineDelegateMethodName: (YourViewController *) controller { // handle the delegate being called here } -(BOOL)delegateMethodReturningBool: (YourViewController *) controller { // handle the delegate being called here return YES; } @end 

// üsulu çağırmadan əvvəl müəyyən edilmiş olub olmadığını yoxlayın

  - (void) someMethodToCallDelegate { if ([[self delegate] respondsToSelector:@selector(defineDelegateMethodName:)]) { [self.delegate delegateMethodName:self]; } } 
6
29 сент. cavab Sujania tərəfindən 29 sentyabrda verilir . 2015-09-29 12:23 '15 at 12:23 AM 2015-09-29 12:23

Öz nümayəndənizi yaratmaq üçün əvvəlcə bir protokol yaratmaq və tətbiqi olmadan zəruri üsulları bəyan etmək lazımdır. Və sonra bu protokolu nümayəndə heyətini və ya nümayəndə metodlarını yerinə yetirmək istədiyiniz sinf başlığında tətbiq edin.

Protokol aşağıda elan edilməlidir:

 @protocol ServiceResponceDelegate <NSObject> - (void) serviceDidFailWithRequestType:(NSString*)error; - (void) serviceDidFinishedSucessfully:(NSString*)success; @end 

Bu, bir vəzifə yerinə yetirməli olduğu xidmət sinifidir. Bir delegeyi necə təyin etmək və necə bir nümayəndə təyin etmək olar? Tətbiq olunan sinifdə, tapşırıq başa çatdıqdan sonra nümayəndəlik üsulları çağırır.

 @interface ServiceClass : NSObject { id <ServiceResponceDelegate> _delegate; } - (void) setDelegate:(id)delegate; - (void) someTask; @end @implementation ServiceClass - (void) setDelegate:(id)delegate { _delegate = delegate; } - (void) someTask {  if (!success) { [_delegate serviceDidFailWithRequestType:@"task failed"]; } else { [_delegate serviceDidFinishedSucessfully:@"task success"]; } } @end 

Bu, xidmət sinifinin adını çəkən, özü üçün nümayəndə təyin edən əsas baxış sinifidir. Həm də protokol mövzuların sinifində həyata keçirilir.

 @interface viewController: UIViewController <ServiceResponceDelegate> { ServiceClass* _service; } - (void) go; @end @implementation viewController // //some methods // - (void) go { _service = [[ServiceClass alloc] init]; [_service setDelegate:self]; [_service someTask]; } 

Bununla birlikdə, bu sinifdə nümayəndə metodlarını tətbiq edərək, rəhbərlik əməliyyat / vəzifənin icrası sonrası geri dönəcəkdir.

4
03 авг. cavab Mahesh 03 aug verilir . 2015-08-03 07:47 '15 'da 07:47' de

Disclaimer: Bu, nümayəndə yaratmaq üçün Swift versiyasıdır.

Beləliklə, nümayəndələri nədir? ... proqram inkişafında, müəyyən bir kontekstdə ümumi problemləri həll etməyə kömək edən yenidən istifadə edilə biləcək həll variantlarının ümumi mürəkkəbləri var, bu "şablonlar" belə ki, ən yaxşı dizayn nümunələri kimi tanınırlar. Deleqlər, bir obyektin xüsusi bir hadisə meydana gəldiyi zaman başqa bir obyektə mesaj göndərməyə imkan verən bir dizayn nümunəsidir. Təsəvvür edin ki, A obyekti bir hərəkət yerinə yetirmək üçün B obyektini çağırır. Bir hərəkət başa çatdıqdan sonra A obyekti B vəzifəsini yerinə yetirmiş və zəruri tədbirlər görəcəyini bilməli, bu, nümayəndələrin köməyi ilə əldə edilə bilər!

Daha yaxşı bir izahat üçün, sadə bir tətbiqdə Swift ilə siniflər arasında məlumat ötürən xüsusi bir nümayəndə yaratmaq üçün necə göstərəcəyəm, bu başlanğıc layihəsinin yüklənmə və ya klonlanması ilə başlamaq və onu başla! https://github.com/jamesrochabrun/DelegateTutorial