Swift에서 원시 값에서 열거형을 가져오는 방법은 무엇입니까?
원시 값에서 열거형을 가져오려고 합니다.
enum TestEnum: String {
case Name
case Gender
case Birth
var rawValue: String {
switch self {
case .Name: return "Name"
case .Gender: return "Gender"
case .Birth: return "Birth Day"
}
}
}
let name = TestEnum(rawValue: "Name") //Name
let gender = TestEnum(rawValue: "Gender") //Gender
하지만 그것은rawValue
공백이 있는 문자열에는 작동하지 않습니다.
let birth = TestEnum(rawValue: "Birth Day") //nil
그것을 얻는 방법에 대한 제안이 있습니까?
너무 복잡합니다. 원시 값을 케이스에 직접 할당합니다.
enum TestEnum: String {
case Name = "Name"
case Gender = "Gender"
case Birth = "Birth Day"
}
let name = TestEnum(rawValue: "Name")! //Name
let gender = TestEnum(rawValue: "Gender")! //Gender
let birth = TestEnum(rawValue: "Birth Day")! //Birth
대소문자 이름이 원시 값과 일치하면 생략할 수도 있습니다.
enum TestEnum: String {
case Name, Gender, Birth = "Birth Day"
}
Swift 3+에서 모든 열거형 사례는 다음과 같습니다.lowercased
전체 작업 예제:
enum TestEnum: String {
case name = "A Name"
case otherName
case test = "Test"
}
let first: TestEnum? = TestEnum(rawValue: "A Name")
let second: TestEnum? = TestEnum(rawValue: "OtherName")
let third: TestEnum? = TestEnum(rawValue: "Test")
print("\(first), \(second), \(third)")
이 모든 것이 작동하지만 원시 값을 사용하여 초기화할 때는 선택 사항이 됩니다.이 문제가 발생하면 열거형에 대한 초기화자 또는 생성자를 생성하여 이를 처리할 수 있습니다.none
대/소문자를 구분하고 열거형을 만들 수 없는 경우 반환합니다.이와 같은 것:
static func create(rawValue:String) -> TestEnum {
if let testVal = TestEnum(rawValue: rawValue) {
return testVal
}
else{
return .none
}
}
Swift 4.2와 CaseItable 프로토콜을 사용하면 전혀 어렵지 않습니다!
다음은 구현 방법의 예입니다.
import UIKit
private enum DataType: String, CaseIterable {
case someDataOne = "an_awesome_string_one"
case someDataTwo = "an_awesome_string_two"
case someDataThree = "an_awesome_string_three"
case someDataFour = "an_awesome_string_four"
func localizedString() -> String {
// Internal operation
// I have a String extension which returns its localized version
return self.rawValue.localized
}
static func fromLocalizedString(localizedString: String) -> DataType? {
for type in DataType.allCases {
if type.localizedString() == localizedString {
return type
}
}
return nil
}
}
// USAGE EXAMPLE
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let dataType = DataType.fromLocalizedString(localizedString: self.title) {
loadUserData(type: dataType)
}
}
원시 값을 기준으로 데이터 유형을 반환하도록 쉽게 수정할 수 있습니다.도움이 되길 바랍니다!
enum TestEnum: String {
case Name, Gender, Birth
}
OR
enum TestEnum: String {
case Name
case Gender
case Birth
}
멤버 값 중 하나로 기본 설정되는 init 메서드를 제공할 수 있습니다.
enum TestEnum: String {
case Name, Gender, Birth
init() {
self = .Gender
}
}
위의 예제에서는 검정 Enum을 사용합니다.이름에는 암묵적인 원시 값인 "이름" 등이 있습니다.
rawValue 속성을 사용하여 열거 사례의 원시 값에 액세스할 수 있습니다.
let testEnum = TestEnum.Name.rawValue
// testEnum is "Name"
let testEnum1 = TestEnum()
// testEnum1 is "Gender"
Enum을 사용하여 원시 값 표시
import UIKit
enum car: String {
case bmw = "BMW"
case jaquar = "JAQUAR"
case rd = "RD"
case benz = "BENZ"
}
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
label.text = car.bmw.rawValue
}
}
저는 이것이 swift 4.2를 위한 빠르고 깨끗한 솔루션이라고 생각합니다(놀이터로 c&p할 수 있습니다).
import UIKit
public enum SomeEnum: String, CaseIterable {
case sun,moon,venus,pluto
}
let str = "venus"
let newEnum = SomeEnum.allCases.filter{$0.rawValue == str}.first
// newEnum is optional
if let result = newEnum {
print(result.rawValue)
}
다음은 swift 4.1에서 더 유용한 코드의 예입니다.
import UIKit
enum FormData {
case userName
case password
static let array = [userName, password]
var placeHolder: String {
switch self {
case .userName:
return AppString.name.localized // will return "Name" string
case .password:
return AppString.password.localized // will return "Password" string
}
}
}
enum AppString: String {
case name = "Name"
case password = "Password"
var localized: String {
return NSLocalizedString(self.rawValue, comment: "")
}
}
enum withdrawBalceTimeGenrateError : String , Error{
case insufficientBalance = "Plz Check Balance"
}
withdrawBalceTimeGenrateError.insufficientBalance.rawValue // Plz Check Balance
언급URL : https://stackoverflow.com/questions/36184795/how-to-get-enum-from-raw-value-in-swift
'programing' 카테고리의 다른 글
Swift UI에서 전환 애니메이션이 제대로 작동하지 않음 (0) | 2023.08.08 |
---|---|
안드로이드에서 카운트다운 타이머를 만드는 방법은? (0) | 2023.08.08 |
페이스북 아이폰 앱에서 지원하는 모든 사용자 지정 URL 체계는 무엇입니까? (0) | 2023.08.08 |
사용자 지정 구성 요소에 변수 전달 (0) | 2023.08.08 |
도커 오류 바인딩: 주소가 이미 사용 중입니다. (0) | 2023.08.08 |