2011-06-28 100 views
2

我是新來的Objective C.我試圖使用一個協議,因爲我會在Java中使用一個接口,但是我不知道如何或者甚至是否是正確的工具。我在Protocol.h定義的協議:我可以在Objective-C中將協議作爲類變量嗎?

@protocol SomeProtocol 
- (void)someMethod; 
@end 

現在,在另一個類,我需要一直的someMethod

#import "Protocol.h" 
@interface OtherClass:NSObject { 
    SomeProtocol objWithSomeMethod; 
} 
@end 

當然「SomeProtocol objWithSomeMethod」給我一個錯誤的變量。那麼有沒有辦法來聲明一個對象,不管類型如何,都符合這個協議?

回答

4

是的,使用尖括號。你可以聲明一個實例變量,以符合這樣的協議:

id<SomeProtocol> objWithSomeMethod; 

如果你想讓它符合不止一個協議,你用逗號將它們像這樣分離:

id<SomeProtocol, SomeOtherProtocol> objWithSomeMethod; 

你也可以用相同的方式聲明變量或參數。

4

尖括號將對象限定爲實施協議。在你的榜樣,寫

#import "Protocol.h" 
@interface OtherClass : NSObject { 
    id<SomeProtocol> objWithSomeMethod; 
} 
@end 

如果要聲明一個類實現一個接口,可以使用相同的符號,主要有:

@interface MyProtocolClass : NSObject <SomeProtocol> { 
    // ... 
} 
@end 
-1

你應該和他的類型聲明的實例變量,然後<>中的協議列表,最後是變量名稱。所以在你的情況下,它會是:

#import "Protocol.h" 
@interface OtherClass:NSObject { 
    id <SomeProtocol> objWithSomeMethod; 
} 
@end 
相關問題