IOS征途之三 分類與協議(二)

 本來分類和協議應該是放在同一篇來寫的,可是最近有點小感冒,這兩天不在狀態,於是現在補上。

協議(protocol)

1.在我看來,目前而言,IOS的協議其實是與Android的接口是同一個概念,包括作用與實現。其作用很好的規範了對象們屬性的統一性。

2.前段時間在一個線下活動中聽說swift主張面向協議編程,當時百思不得其解,後來才明白其實也就等同於面向接口編程。其實與面向對象的思想並不相悖。

3.protocol中有個可選屬性optional的概念,在這裏不太明白:對等java中似乎沒有這個屬性,在此也思考是否有存在這個屬性的必要,如果這個方法是可選的,爲什麼不將它寫在父類中,而要寫在協議裏,這樣豈不是有悖於其統一性的初衷了嗎?

寫了個小demo,代碼如下:

基類

#import <Foundation/Foundation.h>

@interface animals : NSObject
-(BOOL) isBelongAnimals;
@end


#import "animals.h"

@implementation animals
-(BOOL)isBelongAnimals
{
    return true;
}
@end

protocol

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

@protocol animalHabits

-(void) eat;
-(void) sleep;
@optional
-(BOOL)isLazy;
@end


#import "animalHabits.h"
@implementation animalHabits : NSObject 
@end

Panda

#import <Foundation/Foundation.h>
#import "animals.h"
#import "animalHabits.h"
@interface Panda : animals <animalHabits>
@end


#import "Panda.h"

@implementation Panda
//因爲實現了animalHabits這個協議(接口),所以sleep 和 eat方法必須實現,否則會報錯
//接口在此作爲一個方法統一的作用,因爲每一個動物都需要去吃飯和睡覺
-(void)sleep
{
    NSLog(@"Panda always sleeping 14 hours every day!");
}

-(void)eat
{
    NSLog(@"Panda favorite food is bamboo!");
}
-(BOOL)isLazy
{
    NSLog(@"Panda is very lazy!");
    return true;
}
@end

Dog

#import <Foundation/Foundation.h>
#import "animalHabits.h"
#import "animals.h"

@interface Dog : animals<animalHabits>
-(void)skill;
@end


#import "Dog.h"

@implementation Dog

-(void)sleep
{
    NSLog(@"dog always sleep for 6 hours a day");
}

-(void)eat
{
    NSLog(@"dog like bone!");
}

-(void)skill
{
    NSLog(@"dog can protect our house!");
}
@end

main.m

#import <Foundation/Foundation.h>
#import "Panda.h"
#import "Dog.h"

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

    @autoreleasepool {
        Panda *panda = [[Panda alloc] init];
        if ([panda isBelongAnimals]){
            [panda sleep];
            [panda eat];
        }

        Dog *dog = [[Dog alloc] init];
        [dog skill];

    }
    return 0;
}

輸出結果:

2015-09-17 20:43:53.300 Lesson4[610:303] Panda always sleeping 14 hours every day!
2015-09-17 20:43:53.302 Lesson4[610:303] Panda favorite food is bamboo!
2015-09-17 20:43:53.303 Lesson4[610:303] dog can protect our house!
Program ended with exit code: 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章