[英]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 交互時調用該方法是否是類方法,現在是否重要?
我問這個問題,因為我的類沒有任何實例變量,所以我希望它只包含類方法。
我想分享一些我的發現:
我是否像這樣聲明委托無關緊要delegate:self
或delegate:[MyClass class]
但是,我如何聲明方法很重要:
這有效
+(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.