다음 열거가 주어지면 :
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
인터페이스 를 사용 하고 description
getter에 액세스하는 것 입니다. 다음 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"