Swift:将枚举值转换为string?

鉴于以下枚举:

enum Audience { case Public case Friends case Private } 

如何从audience常量下面得到string"Public"

 let audience = Audience.Public 

不知道在哪个Swift版本中添加了这个function,但是现在( Swift 2.1 )你只需要这个代码:

 enum Audience: String { case Public case Friends case Private } let audience = Audience.Public.rawValue // "Public" 

当string用于原始值时,每个案例的隐含值是该案例名称文本

[…]

 enum CompassPoint: String { case North, South, East, West } 

在上面的例子中,CompassPoint.South有一个隐含的“南”的原始值,依此类推。

使用它的rawValue属性访问枚举大小写的原始值:

 let sunsetDirection = CompassPoint.West.rawValue // sunsetDirection is "West" 

资源。

“获取string”的惯用接口是使用CustomStringConvertible接口并访问description获取器。 定义你的enum为:

 enum Foo : CustomStringConvertible { case Bing; case Bang; case Boom; var description : String { switch self { // Use Internationalization, as appropriate. case .Bing: return "Bing"; case .Bang: return "Bang"; case .Boom: return "Boom"; } } } 

在行动:

  > let foo = Foo.Bing foo: Foo = Bing > println ("String for 'foo' is " + foo.description) String for 'foo' is Bing 

更新 :对于Swift> = 2.0,用CustomStringConvertiblereplacePrintable

现在,我将重新定义枚举为:

 enum Audience: String { case Public = "Public" case Friends = "Friends" case Private = "Private" } 

所以我可以这样做:

 audience.toRaw() // "Public" 

但是,这不是新的枚举定义是多余的吗? 我可以保留最初的枚举定义,并执行如下操作:

 audience.toString() // "Public" 

我喜欢使用Printable with Raw Values

 enum Audience: String, Printable { case Public = "Public" case Friends = "Friends" case Private = "Private" var description: String { return self.rawValue } } 

那我们可以这样做:

 let audience = Audience.Public.description // audience = "Public" 

要么

 println("The value of Public is \(Audience.Public)") // Prints "The value of Public is Public" 

更新了Xcode 7 GM的版本。 它现在可以像现在希望的那样工作 – 谢谢苹果!

 enum Rank:Int { case Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King } let r = Rank.Ace print(r) // prints "Ace" print("Rank: \(r)!") // prints "Rank: Ace!" 

在swift 3中,你可以使用这个

 var enumValue = Customer.Physics var str = String(describing: enumValue) 

从Swift如何使用枚举来获取string值

在Swift 2和最新的Xcode 7中(不需要指定枚举types或.rawValue,描述符等等)

更新了Swift 3和Xcode 8:

  enum Audience { case Public case Friends case Private } let audience: Audience = .Public // or, let audience = Audience.Public print(audience) // "Public" 

有多种方法可以做到这一点。 要么你可以在枚举中定义一个函数,该函数根据枚举types的值返回string:

 enum Audience{ ... func toString()->String{ var a:String switch self{ case .Public: a="Public" case .Friends: a="Friends" ... } return a } 

或者你可以试试这个:

 enum Audience:String{ case Public="Public" case Friends="Friends" case Private="Private" } 

并使用它:

 var a:Audience=Audience.Public println(a.toRaw()) 

对于任何阅读“Swift编程语言”“Swift编程语言”一章中的示例并寻找简化simpleDescription()方法的方法,通过执行String(self)将枚举本身转换为String将执行此操作:

  enum Rank: Int { case Ace = 1 //required otherwise Ace will be 0 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { case .Ace, .Jack, .Queen, .King: return String(self).lowercaseString default: return String(self.rawValue) } } } 

尝试几种不同的方法后,我发现如果你不想使用:

 let audience = Audience.Public.toRaw() 

您仍然可以使用结构对其进行归档

 struct Audience { static let Public = "Public" static let Friends = "Friends" static let Private = "Private" } 

那么你的代码:

 let audience = Audience.Public 

将按预期工作。 它不漂亮,有一些缺点,因为你不使用“枚举”,你不能使用快捷方式只添加.Private既不会使用开关的情况下。

如果在Enum中使用Ints,则可以使用3以上的示例

 public enum ECategory : Int{ case Attraction=0, FP, Food, Restroom, Popcorn, Shop, Service, None; var description: String { return String(describing: self) } } let category = ECategory.Attraction let categoryName = category.description //string Attraction