Enum없이 분기하고자 할때
이미지의 확장자별로 분기하고자 했는데 확장자가 늘 일정하지 않을 수 있습니다. "jpg"로 입력되었으면 했지만, "JPG", "JPEG", "jpeg" 등 다양하게 입력이 되는데 이 부분을 모두 분기 처리하기에는 굉장히 번거롭습니다.
func getAvatarImageFilename(for fileExtension: String) -> String? {
swtich {
case "jpg":
return "avatar.jpg"
case "bmp":
return "avatar.bmp"
case "gif":
return "avatar.gif"
// 단일 실패의 처리는 optional
default:
return nil
}
}
if let result = getAvatarImageFilename(for: "jpg") {
print(result)
}
// 근데 "jpg"가 아니라 "JPG"로 입력하면 어떻게 될까?
// 아래 코드는 프린트되지 않습니다.
if let result = getAvatarImageFilename(for: "JPG") {
print(result)
}
위 같은 문제를 Enum을 사용해서 분기처리할 수 있지않을까요?
Enum의 rawValue을 활용한 분기
enum ImageType: String {
case jpg
case bmp
case gif
// 실패할 경우 nil을 반환하는 초기화 메소드
init?(rawValue: String) {
switch rawValue.lowercased() {
case "jpg", "jpeg":
self = .jpg
case "bmp":
self = .bmp
case "gif":
self = .gif
default:
self = nil
}
}
}
func getAvatarImageFilename(for fileExtension: String) -> String? {
guard let imageType = ImageType(rawValue: fileExtension) else {
return
}
return "avatar.\(imageType.rawValue)"
}
초기화 메소드를 통해서 사용자 입장에서 자명하게 활용 가능하도록 할 수 있습니다.
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] 프로퍼티(Property) (0) | 2022.12.26 |
---|---|
[Swift] 상속 (0) | 2022.12.26 |
[Swift] Tuple (0) | 2022.12.26 |
[Swift] Enum (0) | 2022.12.26 |
[Swift] 문자열 (String) (0) | 2022.12.26 |