-
Swift Enum - 4Programming/Swift(iOS) 2021. 4. 1. 22:33728x90
이번에는 enum rawValue를 이용해보겠습니다.
아래 코드의 문제는 뭘까요?
- switch의 case에 문자열로 구분하므로, 실패(default)에 대한 구현을 항상해야됩니다.
- 반환값이 String Optional이므로 호출부에서 if let ~으로 한번 더 처리해야된다.
- 대문자를 따로 해줘야 한다.
func getAvatarImageFileName(for fileExtension:String) -> String? { switch fileExtension.lowercased() { //문자열에 대한 switch ~ case 처리는 현재 case 이외의 값도 올 수 있으므로 default를 추가해야된다 case "jpg", "jpeg": return "avatar.jpg" case "bmp": return "avatar.bmp" case "git": return "avatar.git" default: //return을 옵셔널 처리하므로써, 사용자에게 경고를 줄 수 있다. //단일 실패 처리는 optional이 유용하다. return nil } } if let result = getAvatarImageFileName(for: "jpg") { print(result) }
이때 enum이 가지고 있는 rawValue를 이용하면 위의 예제를 안전게 구현할 수 있습니다.
enum ImageType:String { case jpg case bmp case git //실패 가능한 초기화로 구현해줍니다. init?(rawValue:String) { switch rawValue.lowercased() { case "jpg", "jpeg": self = .jpg case "bmp": self = .bmp case "git": self = .git default: return nil } } }
func getAvatarImageFileName2(for fileExtension:String) -> String? { guard let imageType = ImageType(rawValue: fileExtension) else { return nil } return "avatar.\(imageType.rawValue)" //guard문 사용할수도 있다/ #if false if let imageType = ImageType(rawvalue: fileExtension) { return "avatar.\(imageType.rawValue)" } else { return nil } #endif } if let result = getAvatarImageFileName2(for: "jpg") { print(result) }
getAvatarImageFileName2에서 전달받은 인자 값으로 ImageType을 만듭니다.
만약 enum에 없는 값이라면, nil이 나오고 최종 결과값도 nil이 됩니다.
그렇지 않으면, 생성된 imageType.rawValue를 바로 읽으면 현재 imageType이 나오게 됩니다.
enum을 만들때, String을 구현하게 해놨으므로 rawValue는 자동으로 case의 이름을 따라가게 됩니다.
'Programming > Swift(iOS)' 카테고리의 다른 글
Swift Property - 2 (0) 2021.04.01 Swift Property - 1 (0) 2021.04.01 Swift Enum - 3 (0) 2021.04.01 Swift Enum - 2 (0) 2021.04.01 Swift Enum - 1 (0) 2021.04.01