相关疑难解决方法(0)

Objective-C中的typedef枚举是什么?

我不认为我从根本上理解它enum是什么,何时使用它.

例如:

typedef enum {
    kCircle,
    kRectangle,
    kOblateSpheroid
} ShapeType;
Run Code Online (Sandbox Code Playgroud)

这里真的被宣布了什么?

enums typedef objective-c

1081
推荐指数
8
解决办法
43万
查看次数

转发在C++中声明一个枚举

我正在尝试做类似以下的事情:

enum E;

void Foo(E e);

enum E {A, B, C};
Run Code Online (Sandbox Code Playgroud)

编译器拒绝的.我已经快速浏览了一下Google,而且共识似乎是"你做不到",但我无法理解为什么.谁能解释一下?

澄清2:我这样做是因为我在类中使用私有方法来获取枚举,并且我不希望枚举枚举值 - 例如,我不希望任何人知道E被定义为

enum E {
    FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X
}
Run Code Online (Sandbox Code Playgroud)

因为项目X不是我希望用户了解的东西.

所以,我想转发声明枚举,以便我可以将私有方法放在头文件中,在cpp内部声明枚举,并将构建的库文件和标题分发给人.

至于编译器 - 它是GCC.

c++ enums

257
推荐指数
8
解决办法
18万
查看次数

Objective-C中的新枚举

在最新的工具中,enum现在允许使用一种新的工具:

typedef enum CarType : NSUInteger {
  FourDoorCarType,
  TwoDoorCarType
} CarType;
Run Code Online (Sandbox Code Playgroud)

我的问题部分来自:

  1. 为什么我应该使用它而不是旧的方式?

  2. 为什么会CarType出现两次?我尝试跳过CarType第一行并将第一行留作" typedef enum : NSUInteger {",它似乎工作正常.有什么缺点,如果有的话?

  3. 有些类型NSUInteger可以使用吗?

cocoa objective-c

31
推荐指数
2
解决办法
1万
查看次数

@class for typedef enum?

在一个头文件中,我有类似的东西:

// PasscodeInputViewController.h

typedef enum {
    PasscodeInputModeOn,     // set passcode
    PasscodeInputModeEnter,  // enter passcode
    PasscodeInputModeChange, // change passcode
    PasscodeInputModeOff     // turn off passcode
} PasscodeInputMode;
Run Code Online (Sandbox Code Playgroud)

在另一个头文件中,我声明了一个采用类型参数的方法PasscodeInputMode:

#import "PasscodeInputViewController.h"

- (void)presentPasscodeInputWithMode:(PasscodeInputMode)mode;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我使用#import "PasscodeInputViewController.h"如上所述,因此PasscodeInputMode被认可,但是有@class相同的typedef enum吗?

enums typedef objective-c

21
推荐指数
2
解决办法
7946
查看次数

在 Objective-C 中使用 Swift `enum` 作为属性类型

我有一个enum像这样定义的 Swift:

@objc enum SomeEnum: Int {
  case one, two
}
Run Code Online (Sandbox Code Playgroud)

我可以SomeEnum正常在 Objetive-C 文件中使用,但是当我想在头文件中声明一个属性时,如下所示:

@property (nonatomic, assign) SomeEnum someEnum;
Run Code Online (Sandbox Code Playgroud)

编译器给出错误信息Unknown type name 'SomeEnum'。有趣的是我可以在类的私有接口中创建一个属性。我还尝试清理构建文件夹,但没有帮助。文件<module>-Swift.h已导入到.pch文件中。你知道问题的根源是什么吗?

enums objective-c ios swift

5
推荐指数
1
解决办法
3371
查看次数

在 Objective-C 中前向声明 ns_options

如何在Objective-C中转发声明NS_OPTIONS?

NS_ENUMS 的相关 SO 问题:Objective-C 中的前向声明枚举

Apple Dev Forum 上未回答的问题:https : //forums.developer.apple.com/thread/16305

typedef NS_OPTIONS(NSInteger, MSSOption) {
    MSSOptionNone       = 0,
    MSSOptionName       = 1 << 0,
    MSSOptionEmail      = 1 << 1,
    MSSOptionTelephone  = 1 << 2
};
Run Code Online (Sandbox Code Playgroud)

enums objective-c options forward-declaration

4
推荐指数
1
解决办法
511
查看次数

为什么@class代替#import for AppDelegate.h中的ViewController?

我有一个基本的最佳实践问题的目的C.我明白之间的差别@class#import,但我不明白为什么默认苹果的Xcode模板,这样做:

AppDelegate.h:

@class ViewController;

.M:

#import "ViewController.h

当你可以,而不是仅仅把后者#import.h离开的提ViewController出的.m完全,从而通过1行代码简化.

当然,保存一行代码不是问题,我只是好奇为什么这样做?

objective-c uiviewcontroller

3
推荐指数
1
解决办法
3613
查看次数