ma1*_*w28 120 string enums swift
鉴于以下枚举:
enum Audience {
    case Public
    case Friends
    case Private
}
如何"Public"从audience下面的常量中获取字符串?
let audience = Audience.Public
GoZ*_*ner 190
"获取字符串"的惯用接口是使用CustomStringConvertible接口并访问descriptiongetter.将您定义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)"
String for 'foo' is Bing
更新:对于Swift> = 2.0,替换Printable为CustomStringConvertible
注意:使用CutomStringConvertible允许Foo采用不同的原始类型.例如enum Foo : Int, CustomStringConvertible { ... }是可能的.这种自由可能很有用.
Dev*_*ist 127
不确定在哪个Swift版本中添加了这个功能,但是现在(Swift 2.1)你只需要这个代码:
enum Audience : String {
    case public
    case friends
    case private
}
let audience = Audience.public.rawValue // "public"
当字符串用于原始值时,每个案例的隐含值是该案例名称的文本.
[...]
Run Code Online (Sandbox Code Playgroud)enum CompassPoint : String { case north, south, east, west }在上面的示例中,CompassPoint.south具有隐含的原始值"south",依此类推.
您可以使用其rawValue属性访问枚举案例的原始值:
Run Code Online (Sandbox Code Playgroud)let sunsetDirection = CompassPoint.west.rawValue // sunsetDirection is "west"
ma1*_*w28 31
现在,我将重新定义枚举为:
enum Audience: String {
    case Public = "Public"
    case Friends = "Friends"
    case Private = "Private"
}
这样我才能做到:
audience.toRaw() // "Public"
但是,这个新的枚举定义不是多余的吗?我可以保留初始枚举定义并执行以下操作:
audience.toString() // "Public"
Sim*_*e99 24
我喜欢Printable用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"
Dan*_*nov 24
在swift 3中,你可以使用它
var enumValue = Customer.Physics
var str = String(describing: enumValue)
par*_*par 12
更新了Xcode 7 GM的发布.它现在有人希望 - 感谢Apple!
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!"
gbd*_*vid 10
在Swift 2和最新的Xcode 7中没有比这更简单(不需要指定枚举类型,或.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"
如果在 Enum 中使用 Ints 的 swift 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
小智 9
您还可以使用"\(enumVal)"
下面是一个示例:
enum WeekDays{ case Sat, Sun, Mon, Tue, Wed, The, Fri } 
let dayOfWeek: String = "\(WeekDays.Mon)"
在 Swift 5 中尝试和测试
在尝试了几种不同的方法后,我发现如果您不想使用:
let audience = Audience.Public.toRaw()
您仍然可以使用结构对其进行存档
struct Audience {
   static let Public  = "Public"
   static let Friends = "Friends"
   static let Private = "Private"
}
那么你的代码:
let audience = Audience.Public
将按预期工作。它不漂亮,并且有一些缺点,因为您没有使用“枚举”,您不能使用仅添加 .Private 的快捷方式,也不适用于 switch case。
对于阅读"Swift编程语言"的"A Swift Tour"章节中的示例并寻找简化simpleDescription()方法的方法的人来说,通过执行String(self)将enum本身转换为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)
        }
     }
   }
从 Swift 3.0 开始你可以
var str = String(describing: Audience.friends)
| 归档时间: | 
 | 
| 查看次数: | 90178 次 | 
| 最近记录: |