728x90
반응형
질문 : 문자열 유형으로 열거 형을 열거하는 방법은 무엇입니까?
enum Suit: String {
case spades = "♠"
case hearts = "♥"
case diamonds = "♦"
case clubs = "♣"
}
예를 들어 다음과 같이 어떻게 할 수 있습니까?
for suit in Suit {
// do something with suit
print(suit.rawValue)
}
결과 예 :
♠
♥
♦
♣
반응형
답변
시작 스위프트 4.2 (엑스 코드 10), 단지에 프로토콜 적합성을 추가 CaseIterable
에서 이익을 allCases
. 이 프로토콜 준수를 추가하려면 어딘가에 작성하면됩니다.
extension Suit: CaseIterable {}
열거 형이 자신의 것이라면 선언에서 직접 적합성을 지정할 수 있습니다.
enum Suit: String, CaseIterable { case spades = "♠"; case hearts = "♥"; case diamonds = "♦"; case clubs = "♣" }
다음 코드는 가능한 모든 값을 인쇄합니다.
Suit.allCases.forEach {
print($0.rawValue)
}
Swift 3.x 또는 4.0을 지원해야하는 경우 다음 코드를 추가하여 Swift 4.2 구현을 모방 할 수 있습니다.
#if !swift(>=4.2)
public protocol CaseIterable {
associatedtype AllCases: Collection where AllCases.Element == Self
static var allCases: AllCases { get }
}
extension CaseIterable where Self: Hashable {
static var allCases: [Self] {
return [Self](AnySequence { () -> AnyIterator<Self> in
var raw = 0
var first: Self?
return AnyIterator {
let current = withUnsafeBytes(of: &raw) { $0.load(as: Self.self) }
if raw == 0 {
first = current
} else if current == first {
return nil
}
raw += 1
return current
}
})
}
}
#endif
출처 : https://stackoverflow.com/questions/24007461/how-to-enumerate-an-enum-with-string-type
728x90
반응형
'개발관련 > other' 카테고리의 다른 글
하위 도메인과 도메인간에 쿠키 공유 (0) | 2021.07.28 |
---|---|
RESTful 검색 / 필터링을 설계하는 방법 (0) | 2021.07.28 |
equal, eql, ===, ==의 차이점 (0) | 2021.07.23 |
HTTP 파일 업로드하는 방법 (0) | 2021.07.22 |
프로젝트에서 CocoaPods를 제거하는 방법 (0) | 2021.07.22 |