標籤:
學過java的同學都知道Interface(介面),那麼在Objective-C中有沒有介面呢?其實 Objective-C中用Protocol(協議)來實現的,在Objective-C具體怎麼用,我們直接看代碼例子。
StudentProtocol
//////////////////// .h ///////////////////// #import <Foundation/Foundation.h>@protocol StudentProtocol <NSObject>@optional //下面的方法是可選實現的- (void)fallInLove:(NSString *)name;@required //下面的方法是必須實現的- (void)curriculum;@end
StudentProtocol 已經寫好了那要怎麼用呢,我們以Student 類為例,Student要實現StudentProtocol 只需在Student.h 中類名後加入<StudentProtocol>,Student.m 實現StudentProtocol中定義的方法即可。
//////////////// .h ///////////////////#import "Person.h"#import "StudentProtocol.h"@interface Student : Person <StudentProtocol>- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age;@end//////////////// .m ///////////////////#import "Student.h"@implementation Student- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age{ self = [super init]; if (self) { self.name = name; self.sex = sex; self.age = age; } return self;}- (Person *)work{ NSLog(@"%@正在工作",self.name); return 0;}- (void)printInfo { NSLog(@"我的名字叫:%@ 今年%d歲 我是一名%@ %@",self.name,self.age,self.sex,NSStringFromClass([self class]));}#pragma mark StudentProtocol- (void)fallInLove:(NSString *)name { NSLog(@"我還是學生,談不談戀愛都可以...但是我還是在和 ---> %@ <--- 談戀愛",name);}- (void)curriculum { NSLog(@"我是學生,必須上課學習...");}@end
在StudentProtocol 聲明了兩個方法,有一個可選實現,那我們有沒有辦法知道 Student 到底實現了這個方法呢?有的,繼續看代碼。
#import "AppDelegate.h"#import "Student.h"#import "StudentProtocol.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { Student *s = [[Student alloc] initWithName:@"小明" sex:@"男" age:12]; if ([s conformsToProtocol:@protocol(StudentProtocol)]) { //判斷是否遵循了某個協議 NSLog(@"我遵循了 --- StudentProtocol --- 協議"); if ([s respondsToSelector:@selector(fallInLove:)]) { //判斷是否有實現某個方法 [s fallInLove:@"如花"]; } } return YES;}@end
測試結果:
2015-06-14 18:23:13.104 Attendance[16464:617950] 我遵循了 --- StudentProtocol --- 協議
2015-06-14 18:23:13.104 Attendance[16464:617950] 我還是學生,談不談戀愛都可以...,但是我還是在和---> 如花 <---談戀愛。
本站文章為 寶寶巴士 SD.Team 原創,轉載務必在明顯處註明:(作者官方網站: 寶寶巴士 )
轉載自【寶寶巴士SuperDo團隊】 原文連結: http://www.cnblogs.com/superdo/p/4575504.html
[Objective-C] 006_Protocol(協議)