自从Xcode 8发布以来,我们已经获得了NS_STRING_ENUM和NS_EXTENSIBLE_STRING_ENUM。正如Apple的文档中所述,使用NS_EXTENSIBLE_STRING_ENUM的Objective-c全局字符串被导入到Swift结构中,而NS_STRING_ENUM将它们作为枚举字符串导入。然而在实践中,这两个属性都变成了结构。
是否有一种巧妙的遗漏,或者这只是一个错误。
// traffic.h
typedef NSString * TrafficLightColor NS_STRING_ENUM;
static TrafficLightColor const TrafficLightColorRed = @"Red";
static TrafficLightColor const TrafficLightColorYellow = @"Yellow";
static TrafficLightColor const TrafficLightColorGreen = @"Green";
文档说它将被迅速导入为:
enum TrafficLightColor: String {
case red
case yellow
case green
}
但事实并非如此。相反,它被移植到swift作为结构:
struct TrafficLightColor : RawRepresentable, _SwiftNewtypeWrapper, Equatable, Hashable, Comparable, _ObjectiveCBridgeable {
static let red: TrafficLightColor
static let yellow: TrafficLightColor
static let green: TrafficLightColor
}
因此,简而言之,NS_EXTENSIBLE_STRING_ENUM的工作原理与Apple文档相同。然而,NS_STRING_ENUM没有。是否有一些我需要更改以使NS_STRING_ENUM在swift中生成枚举字符串?