前言
本文具有强烈的个人感情色彩,如有观看不适,请尽快关闭. 本文仅作为个人学习记录使用,也欢迎在许可协议范围内转载或分享,请尊重版权并且保留原文链接,谢谢您的理解合作. 如果您觉得本站对您能有帮助,您可以使用RSS方式订阅本站,感谢支持!
枚举
在Objective-C
中并没有一个专门的类型来定义字符串枚举.我们常用的枚举都是整形,并且自动伸长累加+1.
1
2
3
4
5
6
7
8
typedef NS_ENUM(NSInteger, YZAnimationType) {
YZAnimationTypeDefault = 0,
YZAnimationType1 = 1,
YZAnimationType2 = 2,
YZAnimationType3 = 3,
YZAnimationType4 = 4,
YZAnimationTypeCount,
};
在C++中有专门的枚举类,但是在iOS的objc中并没有C++中的专门枚举类,今天就来学习一个常量字符串字面量定义的枚举类型
我们新建一个class, 就叫YZEnumConst.h
,然后 写上以下代码
1
2
3
4
#import <Foundation/Foundation.h>
typedef NSString * const kComponentMessage NS_STRING_ENUM;
FOUNDATION_EXPORT kComponentMessage const kComponentMessageXXXXX;
在YZEnumConst.m
中 写上
1
2
kComponentMessage const kComponentMessageXXXXX = @"ComponentMessageXXXXX";
这样通过类型别名的形式就构成了 objc中的字符串枚举类型.
注意: 声明必须在
.h
中,实现必须在.m
中,这样才不会造成找不到符号编译报错.
这里大家会注意到有个关键字 NS_STRING_ENUM
和FOUNDATION_EXPORT
NS_STRING_ENUM
代表 类型 专用于枚举字符串FOUNDATION_EXPORT
代表 对外暴漏声明 的字符串常量.
结合以上使用规则我们可以参考一下苹果内部的定义,例如动画常用的差时器常量.
1
2
3
4
5
6
7
8
9
10
11
typedef NSString * CAMediaTimingFunctionName NS_TYPED_ENUM;
CA_EXTERN CAMediaTimingFunctionName const kCAMediaTimingFunctionLinear
API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
CA_EXTERN CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseIn
API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
CA_EXTERN CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseOut
API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
CA_EXTERN CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseInEaseOut
API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
CA_EXTERN CAMediaTimingFunctionName const kCAMediaTimingFunctionDefault
API_AVAILABLE(macos(10.6), ios(3.0), watchos(2.0), tvos(9.0));
CA_EXTERN
定义在<CoreGraphics/CGBase.h>
中
1
2
3
#ifndef CA_EXTERN
# define CA_EXTERN extern __attribute__((visibility("default")))
#endif
这里的实现是参照苹果的差时器字符串枚举实现的.
总结
开发过程中记录一些有价值的知识点,当使用时才能更加快速的完成工作,提高工作效率.