11 ответов:
не уверен, в какой версии Swift эта функция была добавлена, но прямо сейчас (Swift 2.1) нужен только этот код:
enum Audience : String { case public case friends case private } let audience = Audience.public.rawValue // "public"когда строки используются для необработанных значений, неявное значение для каждого случая это текст названия этого дела.
[...]
enum CompassPoint : String { case north, south, east, west }В примере выше, CompassPoint.Юг имеет неявное сырое значение "юг", и так далее.
вы получаете доступ к необработанному значению случай перечисления с его значением rawValue свойство:
let sunsetDirection = CompassPoint.west.rawValue // sunsetDirection is "west"
идиоматический интерфейс для "получения строки" должен использовать
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)" String for 'foo' is BingОбновлено: для Swift >= 2.0, заменить
PrintableСCustomStringConvertibleПримечание: используя
CutomStringConvertibleпозволяетFooпринять разный тип. Напримерenum Foo : Int, CustomStringConvertible { ... }возможно. Эта свобода может быть полезной.
сейчас я переопределю перечисление как:
enum Audience: String { case Public = "Public" case Friends = "Friends" case Private = "Private" }Так что я могу сделать:
audience.toRaw() // "Public"но разве это новое определение перечисления не является избыточным? Могу ли я сохранить начальное определение перечисления и сделать что-то вроде:
audience.toString() // "Public"
мне нравится использовать
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"
в swift 3, Вы можете использовать это
var enumValue = Customer.Physics var str = String(describing: enumValue)С Swift как использовать перечисление, чтобы получить строковое значение
обновлено для выпуска 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!"
это не может быть проще, чем в 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"
для тех, кто читает пример в главе" a Swift Tour "раздела" язык программирования Swift" и ищет способ упростить метод simpleDescription (), Преобразуя само перечисление в строку, выполнив
String(self)будет делать это: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будет работать, как ожидалось. Это не очень красиво, и есть некоторые недостатки, потому что вы не используете "перечисление", вы не можете использовать ярлык только добавление .Частный ни будет работать с чехлами коммутаторов.
есть несколько способов сделать это. Либо вы можете определить функцию в перечислении, которая возвращает строку на основе значения типа enum:
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 3 и выше при использовании Ints в Enum
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
Comments