美文网首页
iOS设计模式 (七) 协议模式

iOS设计模式 (七) 协议模式

作者: handsome5 | 来源:发表于2018-05-12 18:26 被阅读13次
非正式协议
  • 非正式协议就是类别,即凡是NSObject或其子类的类别,都是非正式协议。
协议(protocol)
  • 简单的说就是声明一些方法写到.h中(方法有2种,一是必须实现,二是选择实现)
协议的作用
  • 供其他的类去遵守,如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法
协议的声明
#import <Foundation/Foundation.h>

@protocol PersonProtocol <NSObject>

- (NSInteger )accpetSpeeds;
@end
协议的使用
#import "ViewController.h"
#import "PersonProtocol.h"

@interface ViewController ()<PersonDelegate>
@end
协议代理的demo实例
  • PersonProtocol
#import <Foundation/Foundation.h>

@protocol PersonProtocol <NSObject>

- (NSInteger )accpetSpeeds;

@end
  • Model 类
@interface Model : NSObject

- (NSInteger )accpetSpeeds;

@end

#import "Model.h"
#import "PersonProtocol.h"

@interface Model ()<PersonProtocol>

@end

@implementation Model

- (NSInteger )accpetSpeeds
{
    return 100.f;
}

@end
  • Person
#import <Foundation/Foundation.h>

@class Person;

@protocol PersonDelegate <NSObject>

- (void)personRun:(Person *)person speeds:(NSInteger)speeds;
@end

@interface Person : NSObject

@property (nonatomic, weak)id <PersonDelegate>delegate;

- (void)run:(NSInteger)speeds;

@end
#import "Person.h"

@implementation Person

- (void)run:(NSInteger)speeds
{
    
    if (self.delegate && [self.delegate respondsToSelector:@selector(personRun:speeds:)]) {
        [self.delegate personRun:self speeds:0.5];
    }
    
}
@end
  • ViewController
#import "ViewController.h"
#import "Person.h"
#import "PersonProtocol.h"
#import "Model.h"

@interface ViewController ()<PersonDelegate>
@property (nonatomic, assign)NSInteger age;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *p = [[Person alloc] init];
    p.delegate = self;
    [p run: 50];
    
    Model *mode = [Model new];
    id <PersonProtocol> object = mode;
    [self testData:object];
    
}

- (void)personRun:(Person *)person speeds:(NSInteger)speeds
{
    NSLog(@"speeds====:%ld",speeds);
}



- (void)testData:(id<PersonProtocol>)model
{
    self.age  = [model accpetSpeeds];
    NSLog(@"self.age ===:%ld",self.age);
}

@end

相关文章

网友评论

      本文标题:iOS设计模式 (七) 协议模式

      本文链接:https://www.haomeiwen.com/subject/ykjekftx.html