天天看點

OC循環漸進:協定

OC中的協定就相當于Java中的接口,那個類實作了這個協定就必須實作協定裡面的方法。

以下為一個執行個體:

Student.h 的代碼檔案如下:

#import <Foundation/Foundation.h>

@protocol StudentProtocol <NSObject>

//必須實作的方法,不寫時預設
@required 
- (void)sayHi;

//可選擇的方法
@optional 
- (void)sayHello;

@end

@interface Student : NSObject <StudentProtocol>

@end
           

Student.m 的代碼檔案如下:

#import "Student.h"

@implementation Student

- (void)sayHi {

    NSLog(@"%s",__FUNCTION_);
}

@end
           

main.m 的代碼檔案如下:

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Student *stu = [[Student alloc] init];

        [stu sayHi];

    }
    return ;
}
           

測試結果如下:

-08- :: Demo01[:] -[Student sayHi]
           

當然,協定裡也不能定義屬性,當可以使用@property聲明setter和getter方法,詳情請參考我的OC循環漸進:類目和延展中的【模拟延展屬性】和OC循環漸進:模拟實作多繼承的兩種方式中的【協定模拟多繼承】。

繼續閱讀