I'm thinking a bit, but the reason is that Objective-C objects of type NSString cannot be statically distributed (see, for example, Are Objects Created in Objective-C on the Stack? ). If
typedef NSString VMVideoCategoryType;
were imported into Swift, then you could declare a local variable
var foo : VMVideoCategoryType
which would be NSString , not a pointer to NSString .
Note also that what you see in Swift as NSString corresponds to NSString * in Objective-C.
If you define VMVideoCategoryType as a typedef for NSString * then this can be seen in Swift:
typedef NSString * VMVideoCategoryType; extern VMVideoCategoryType const VMVideoCategoryType_MusicVideo;
source share