类对象到协议

时间:2015-11-28 15:00:12

标签: objective-c delegates protocols

我有一个模型类假存储库,它实现了一个委托方法:

·H

@interface FakeAccountRepository : NSObject <AccountRepositoryDelegate>
@end

的.m

    @implementation FakeAccountRepository
-(id)init{
    if (self = [super init]) {
       // statements
    }
    return self;
}

这是协议和代理:

@protocol AccountRepositoryDelegate <NSObject>

@optional
- (NSArray *)accountRegistered;

@end

在View Controller中,这是什么意思:

id <AccountRepositoryDelegate> fakeRepository = [[FakeAccountRepository alloc] init];

我的意思是&#34; [[FakeAccountRepository alloc] init]&#34;正在返回FakeRepository类的对象。那么这个分配发生了什么?

1 个答案:

答案 0 :(得分:1)

代码:

[[FakeAccountRepository alloc] init];

显然会创建FakeAccountRepository类的实例。而且,如您所知,此类恰好符合AccountRepositoryDelegate协议。

宣言:

id <AccountRepositoryDelegate> fakeRepository

正在创建名为fakeRepository的变量,其类型为id <AccountRepositoryDelegate>id表示对任何对象类型的对象引用。 <AccountRepositoryDelegate>当然引用了AccountRepositoryDelegate协议。它们一起表示变量可以是任何对象类型,只要该对象符合AccountRepositoryDelegate协议。

基本上,id<SomeProtocol>意味着您可以分配符合给定协议的任何对象。

您可以在iOS API中看到大量此类示例。例如,dataSource的{​​{1}}和delegate属性分别定义为UITableViewid<UITableViewDataSource>