簡體   English   中英

我可以使用類方法作為委托回調嗎

[英]Can I use a class method as a delegate callback

在類方法方法中,我聲明以下內容:

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                                                   message:@"World"
                                                  delegate:self
                                         cancelButtonTitle:@"Cancel" 
                                         otherButtonTitles:@"Done", nil];

現在,即使包含方法是類方法,編譯器也不會抱怨delegate:self 現在要成為委托,我必須在UIAlertViewDelegate協議中實現該方法。

為了在用戶與我的 AlertView 交互時調用該方法是否是類方法,現在是否重要?

我問這個問題,因為我的類沒有任何實例變量,所以我希望它只包含類方法。

我想分享一些我的發現:

  1. 我是否像這樣聲明委托無關緊要delegate:selfdelegate:[MyClass class]

  2. 但是,我如何聲明方法很重要:

    這有效

    +(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ // Some Actions here }

    盡管以下“語法”是UIAlertViewDelegate協議中的聲明,但它不起作用

     // Mind the `-` sign at the start of the line. -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ // Some Actions here }

首先,我假設“靜態”方法是指類方法(用+而不是-聲明)。

關於 Objective-C 的“編譯器不會抱怨”並不總是告訴你太多。 它真正的意思是你已經讓編譯器相信一切都應該(或至少可以)在運行時工作。

最后,如果您作為委托提供的對象響應了正確的消息,則編譯器不會在意它是一個類(運行時也不會)。 在這種情況下,您從類方法提供self 就好像您輸入了[MyClass class]

我認為這是否是您應該做的事情可能值得懷疑 - 但這可能超出了您的問題范圍。

是的你可以 !!! 一個類也是一個對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM