[string] 스위프트 : 열거 형 값을 문자열로 변환 하시겠습니까?

다음 열거가 주어지면 :

enum Audience {
    case Public
    case Friends
    case Private
}

아래 상수 에서 문자열 "Public"을 어떻게 얻 audience습니까?

let audience = Audience.Public



답변

이 기능이 어떤 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.south는 “south”등의 암시 적 원시 값을 갖습니다.

rawValue 속성을 사용하여 열거 사례의 원시 값에 액세스합니다.

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

출처.


답변

‘문자열 얻기’에 대한 관용적 인터페이스는 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

업데이트 : 스위프트> = 2.0의 교체 Printable와 함께CustomStringConvertible

참고 :를 사용 CustomStringConvertible하면 Foo다른 원시 유형을 채택 할 수 있습니다 . 예를 들어 enum Foo : Int, CustomStringConvertible { ... }가능합니다. 이 자유는 유용 할 수 있습니다.


답변

지금은 열거 형을 다음과 같이 재정의합니다.

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

내가 할 수 있도록 :

audience.toRaw() // "Public"

그러나이 새로운 열거 정의가 중복되지 않습니까? 초기 열거 정의를 유지하고 다음과 같이 할 수 있습니까?

audience.toString() // "Public"


답변

스위프트 3에서는 이것을 사용할 수 있습니다

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

Swift 에서 enum을 사용하여 문자열 값을 얻는 방법


답변

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"


답변

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 2와 최신 Xcode 7에서는 이보다 간단 해 질 수 없었습니다 (enum 유형 또는 .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"