在Swift中使用obj-c typedef

时间:2015-06-29 21:05:16

标签: objective-c swift typedef

我有一个typedef:

typedef NSString VMVideoCategoryType;

extern VMVideoCategoryType *const VMVideoCategoryType_MusicVideo;
extern VMVideoCategoryType *const VMVideoCategoryType_Audio;
extern VMVideoCategoryType *const VMVideoCategoryType_Performance;
extern VMVideoCategoryType *const VMVideoCategoryType_Lyric;
extern VMVideoCategoryType *const VMVideoCategoryType_Show;

我已将此文件包含在桥接标头中。但是,当我尝试访问Swift文件中的VMVideoCategoryType时,出现错误:

Use of undeclared type 'VMVideoCategoryType'

有没有办法让这项工作或者我必须在Swift中完全重新定义这种类型?

1 个答案:

答案 0 :(得分:11)

我有点推测,但原因似乎是Objective-C 像NSString这样的对象无法静态分配(请参阅例如Are objects in Objective-C ever created on the stack?)。如果

typedef NSString VMVideoCategoryType;

导入Swift然后你可以声明一个局部变量

var foo : VMVideoCategoryType

这将是NSString不是指向NSString的指针。

另请注意,您在Swift中看到的NSString对应NSString * 在Objective-C中。

如果您将VMVideoCategoryType定义为NSString *的typedef 然后在Swift中

typedef NSString * VMVideoCategoryType;

extern VMVideoCategoryType const VMVideoCategoryType_MusicVideo;
// ...