[Swift] Enum2

개자이너·2022년 2월 6일
0

내맘대로 Swift

목록 보기
3/6

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)"
}

초기화 메소드를 통해서 사용자 입장에서 자명하게 활용 가능하도록 할 수 있습니다.

profile
개발과 디자인을 다 하려는 욕심 그득한 노예

0개의 댓글