gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:49:02 25 4
gpt4 key购买 nike

我编写了一个执行一些图形计算的方法。在那里,您可以指定起始方向,例如“从左”、“从右”、“从下”、“从上”。

现在我不希望我的方法的用户传递令人困惑的值,如 1、2、3 或 4,甚至字符串。没有那样的事。相反,我想创建如下常量:

kFromLeft、kFromRight、kFromTop、kFromBottom

我在 Apple 头文件中看到了这一点:

enum CGImageAlphaInfo {
kCGImageAlphaNone,
kCGImageAlphaPremultipliedLast,
kCGImageAlphaPremultipliedFirst,
kCGImageAlphaLast,
kCGImageAlphaFirst,
kCGImageAlphaNoneSkipLast,
kCGImageAlphaNoneSkipFirst,
kCGImageAlphaOnly
};
typedef enum CGImageAlphaInfo CGImageAlphaInfo;

这里有五件事我不明白/我不清楚:

1) 为什么定义和 typedef 之间要用分号分隔?

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

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

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

#define kCGImageAlphaNone 100
#define kCGImageAlphaPremultipliedLast 300
#define kCGImageAlphaPremultipliedFirst 900

5)我需要将这些常量设置为如此愚蠢的值吗?或者我可以在我的方法内部检查传入的常量,例如

if(paramConst == kCGImageAlphaNone) {...}

最佳答案

1) 分号始终以 enum 结尾陈述。在本例中,有两个单独的语句:一个定义命名枚举,下一个定义新类型。

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

typedef <sometype> <newname>;

所以enum CGImageAlphaInfo是旧类型,并且 CGImageAlphaInfo是新名字。 Apple 对两者使用相同的名称,这有点令人困惑,但确实是最好的方法。

3)对。

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

5)我不确定你所说的“愚蠢的值(value)观”是什么意思。但是,是的,您应该始终按照您所描述的方式检查名称的使用情况,并且切勿使用诸如“300”或“1”之类的原始值。

关于objective-c - 如何制作一组常量,以提高方法的可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/868648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com