1.0----5 符合其他类别与协议的要求
符合其他类别与协议的要 ios7cook目录
Objective-C中有一个协议的概念。这在许多其他语言(总是以不同的术语,似乎)发现的一个概念;例如,它被称为Java中的一个接口。的协议,正如它的名字所暗示的,是一组类可以为了遵守规则,以某种方式使用。下面的规则的类被认为符合协议。协议是从在它们不具有执行实际的类不同。他们只是规则。例如,每辆汽车有轮子,门和主体的颜色,在许多其他事情。让我们在一个名为租车协议中定义这些属性。只需按照以下步骤来创建一个可以包含我们的租车协议的头文件:
1,在Xcode,而你的项目是开放的,从文件菜单中,选择新建→文件...
2,在新的对话框,在左侧边,请确保您选择在iOS的主类cocoaTouch。一旦完成,在对话框的右边,选择“Objective-C protocol”,然后按[下一步]按钮。
3,在下一屏幕上,根据协议部分,进入车作为协议的名称,然后按[下一步]按钮。
4,现在,您将被要求保存在磁盘上的协议。只需选择一个位置,通常在项目的文件夹,然后按创建按钮。
现在的Xcode会创建一个文件给你命名Car.h有这样的内容:
#import <Foundation/Foundation.h>
@protocol Car <NSObject>@end
因此,让我们继续前进,为汽车协议定义的属性,正如我们在本节前面讨论:
#import <Foundation/Foundation.h>
@protocol Car <NSObject>
@property (nonatomic, copy) NSArray *wheels; @property (nonatomic, strong) UIColor *bodyColor; @property (nonatomic, copy) NSArray *doors;
@end
现在,我们的协议已经被定义,让我们创建一个类汽车,如捷豹,然后让这个类符合我们的协议。只需按照“创建和服用类优势”第5页上创建一个名为捷豹类,然后使其符合像这样的租车协议中提供的步骤:
#import <Foundation/Foundation.h>
#import "Car.h"
@interface Jaguar : NSObject <Car> @end
如果你现在建立你的项目,你会发现,编译器会给你一些这样的警示:
Auto property synthesis will not synthesize property declared in a protocol 汽车综合性能也不会在协议综合性声明
这只是告诉你,你的捷豹类是企图以符合汽车的协议,但没有真正落实该协议所要求的性能和/或方法。所以,你现在应该知道,一个协议可以有必需的或可选的项目,以及您的@optional或@Required关键字,表示它们。默认限定符@required,由于我们的汽车的协议,我们没有明确指定预选赛中,编译器选择了隐式@required我们。因此,捷豹类现在有实现的是从它所需的租车协议,像这样的一切:
#import <Foundation/Foundation.h> #import "Car.h" @interface Jaguar : NSObject <Car> @property (nonatomic, copy) NSArray *wheels;
@property (nonatomic, strong) UIColor *bodyColor;
@property (nonatomic, copy) NSArray *doors; @end
完美的。现在你有协议的基础知识,以及它们如何工作,如何定义它们的理解。我们将在本书后面详细了解他们,所以你现在知道有关这些协议已经相当足够。