Swift의 튜플 열거 형
Swift에서 튜플 열거 형을 만들 수 있습니까?
다음과 같은 것을 만들고 싶습니다.
enum ErrorCode: (Int, String) {
case Generic_Error = (0, "Unknown")
case DB_Error = (909, "Database")
}
하지만 컴파일되지 않습니다 ... 비슷한 결과를 얻을 수있는 방법이 있습니까?
"유사하다"는 의미에 따라 다릅니다. 내가하는 일은 정적 상수 속성이있는 Struct를 사용하는 것입니다.
struct Trouble {
static let Generic_Error = (0, "Unknown")
static let DB_Error = (909, "Database")
}
이제 Trouble.Generic_Error
코드 전체에서 같은 것을 사용할 수 있습니다.
Swift 열거는 원시 값 유형으로 튜플을 가질 수 없습니다.
다른 방법으로는 코드를 저장하고 그로부터 설명을 파생하는 방법이 있습니다.
enum ErrorCode: Int, CustomStringConvertible {
case Generic = 0
case DB = 909
var description: String {
switch self {
case .Generic:
return "Unknown"
case .DB:
return "Database"
}
}
}
... 또는 열거 사례 자체에 코드 및 설명에 대한 관련 값을 저장합니다.
enum Error {
case Generic(Int, String)
case DB(Int, String)
}
상수 값을 찾고 있다면 @matt의 제안 struct
도 가능합니다.
당신을 준수 할 수 RawRepresentable
및 사용 (Int, String)
은 AS Self.RawValue
관련 유형입니다.
enum ErrorCode: RawRepresentable {
case Generic_Error
case DB_Error
var rawValue: (Int, String) {
switch self {
case .Generic_Error: return (0, "Unknown")
case .DB_Error: return (909, "Database")
}
}
init?(rawValue: (Int, String)) {
switch rawValue {
case (0, "Unknown"): self = .Generic_Error
case (909, "Database"): self = .DB_Error
default: return nil
}
}
}
아마도 다음과 같은 일을 할 수 있습니다.
enum ErrorCode {
case Generic_Error
case DB_Error
func values() -> (code: Int!, description: String?)! {
switch self {
case .Generic_Error:
return (0, "Unknown")
case .DB_Error:
return (909, "Database")
}
}
}
나중에 그런 일을 할 수 있습니다.
let errorCode: ErrorCode = ErrorCode.Generic_Error;
if (errorCode.values().code == 0) {
// do the business here...
}
생성 enum
하고 var
튜플 유형을 추가 하십시오 (String, String)
.
enum SomeType {
case type1
case type2
case type3
var typeNameAndDescription: (name: String, description: String) {
switch self {
case .type1:
return ("type1 name", "type1 description")
case .type2:
return ("type2 name", "type2 description")
case .type3:
return ("type3 name", "type3 description")
}
}
}
이후 :
let myType = SomeType.type1
let typeName = myType.typeNameAndDescription.name
let typeDescription = myType.typeNameAndDescription.description
enum ErrorCode {
case Generic_Error
case DB_Error
public var code:Int{
switch self {
case .Generic_Error: return 0
case .DB_Error: return 909
}
}
public var name:String{
switch self {
case .Generic_Error: return "Unknown"
case .DB_Error: return "Database"
}
}
}
사용 :
let err:ErrorCode = .Generic_Error
print(err.code) //0
print(err.name) //Unknown
열거 형을 유지하는 내 솔루션은 rawValue var에 대한 get 메서드를 만드는 것입니다.
enum LoadingType {
case poster
case movie
case refresh
var rawValue: (file: String, anim: String) {
get {
switch self {
case .movie:
return ("poster_loading", "LoadingView")
case .poster:
return ("loading", "LoadingView")
case .refresh:
return ("loading", "RefreshView")
}
}
}
}
이 코드를 사용하면 각 Tuple 요소를 이름으로 호출 할 수도 있습니다.
self.type.rawValue.file
Int로 열거 형을 만듭니다.
예를 들면 :
https://github.com/rhodgkins/SwiftHTTPStatusCodes/blob/master/Sources/HTTPStatusCodes.swift
참고 URL : https://stackoverflow.com/questions/26387275/enum-of-tuples-in-swift
'development' 카테고리의 다른 글
Django : 모델의 목록 필드? (0) | 2020.12.10 |
---|---|
rspec 실행시 오류 :`require ': 해당 파일을로드 할 수 없음 — rails_helper (LoadError) (0) | 2020.12.10 |
Bootstrap의 JavaScript에는 jQuery 버전 1.9.1 이상이 필요합니다. (0) | 2020.12.10 |
Flexbox는 Safari에서 첫 번째 행의 마지막 열을 감 쌉니다. (0) | 2020.12.10 |
Android 오류 빌드 서명 된 APK : 'externalOverride'구성 서명에 대한 keystore.jks를 찾을 수 없음 (0) | 2020.12.10 |