如何制作一组常量,以提高方法的可用性?

Tha*_*nks 1 cocoa cocoa-touch objective-c

我写了一个做一些图形计算的方法.在那里,你可以指定一个起始方向,如"从左边","从右边","从底部","从顶部".

现在我不希望我的方法的用户传递混乱的值,如1,2,3或4甚至字符串.没有那样的事.相反,我想创建常量,如:

kFromLeft,kFromRight,kFromTop,kFromBottom

我在Apple头文件中看到过这个:

enum CGImageAlphaInfo {
    kCGImageAlphaNone,              
    kCGImageAlphaPremultipliedLast,  
    kCGImageAlphaPremultipliedFirst, 
    kCGImageAlphaLast,               
    kCGImageAlphaFirst,              
    kCGImageAlphaNoneSkipLast,       
    kCGImageAlphaNoneSkipFirst,     
    kCGImageAlphaOnly                
};
typedef enum CGImageAlphaInfo CGImageAlphaInfo;
Run Code Online (Sandbox Code Playgroud)

我不明白的五件事/我不清楚:

1)为什么有一个分号将定义与typedef分开?

2)为什么他们像parot一样重复CGImageAlphaInfo?

3)如果我在我的头文件中放入这样的东西,我会在我的方法中说参数的类型是CGImageAlphaInfo(当然我会有不同的名字),对吧?

4)我通常会以这样的方式指定这些常量的值?(例):

#define kCGImageAlphaNone 100
#define kCGImageAlphaPremultipliedLast 300
#define kCGImageAlphaPremultipliedFirst 900
Run Code Online (Sandbox Code Playgroud)

5)我是否需要将这些常量设置为这样的愚蠢值?或者我可以在我的方法中检查哪个常量传入,比如

if(paramConst == kCGImageAlphaNone) {...}
Run Code Online (Sandbox Code Playgroud)

Ada*_*nst 6

1)分号总是终止一个enum语句.在这种情况下,有两个单独的语句:一个定义命名枚举,下一个定义新类型.

2)enum语句创建一个名为" enum CGImageAlphaInfo" 的新类型.但是到处输入这个很麻烦,所以使用了typedef语句.typedef语句的工作方式如下:

typedef <sometype> <newname>;

enum CGImageAlphaInfo旧类型CGImageAlphaInfo也是如此,并且是新名称.Apple使用相同的名称,这有点令人困惑,但实际上是最好的方法.

3)对.

4)你可以这样做,但是你必须手动分配常数值; 枚举值自动分配.但是,主要的好处是你得到了一些类型检查,因为你可以使用CGImageAlphaInfo类型而不是简单的int,这可以更容易地分配无效值.

5)我不确定你的"愚蠢价值观"是什么意思.但是,是的,您应该始终使用您描述的方式检查名称,并且永远不要使用某些原始值,如"300"或"1".