iOS9新特性之常见关键字

2017-05-05  本文已影响8人  CoderShmily

iOS9新出的关键字,用来修饰属性,或者方法的参数,方法的返回值
好处:

nullable和nonnull

nullable:表示可以为空,nonnull为非空
只能修饰对象,不能修饰int等,因为nil只能赋值给对象
书写规范一样,以nullable为例:

@property (nonatomic, strong, nullable) NSString *name;
@property (nonatomic, strong) NSString *_Nullable name;
@property (nonatomic, strong) NSString *__nullable name;
- (nonnull NSString *)name:(nonnull NSString *)str;
- (NSString *_Nonnull)name;

NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END之间定义的所有对象属性和方法默认都是nonnull

NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) NSString *name;
NS_ASSUME_NONNULL_END

null_resettable

// null_resettable:get不能返回空,set可以为空(比如控制器的view)
@property (nonatomic, copy, null_resettable) NSString *name;

null_resettable必须重写setter或者getter方法,处理传递的值为空的情况(实际重写不判断为空警告也没了),不然会有警告。

null_unspecified

null_unspecified不确定是否为空

@property (nonatomic, strong) NSString *_Null_unspecified name;
@property (nonatomic, strong, null_unspecified) NSString *name;

泛型

泛型:限制类型
泛型使用场景:

泛型好处:

@property (nonatomic, strong) NSArray<NSString *> *nameArr;

// 后面使用时可以直接调出对应的方法
self.nameArr[0].length;
// ObjectType可以自己指定名字
@interface Person<ObjectType> : NSObject
@property (nonatomic) ObjectType language;

- (ObjectType)language;
@end

Person<NSString *> *p = [Person new];
p.language = @"ss";

__covariant

(协变): 用于泛型数据强转类型,可以向上强转,子类可以转成父类。

@interface Person<__covariant ObjectType> : NSObject

@property (nonatomic) ObjectType language;

- (ObjectType)language;
@end

__contravariant

(逆变): 用于泛型数据强转类型,可以向下强转,父类可以转成子类。

@interface Person<__contravariant ObjectType> : NSObject
@end

__kindof

__kindof表示当前类或者它的子类
好处:

@property (nonatomic, strong) NSArray<__kindof NSString *> *nameArr;

- (__kindof NSString *)test;
上一篇下一篇

猜你喜欢

热点阅读