dev-signer
개자이너
dev-signer
전체 방문자
오늘
어제
  • 분류 전체보기 (20)
    • Project (8)
      • DIMODAMO (1)
      • Menual (6)
      • WatchOS (1)
    • iOS (9)
      • Swift (6)
      • UI (2)
    • 코딩테스트 (2)
    • 일상 (1)
      • 이야기 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 디지털미디어디자인
  • SnapKit
  • 코딩테스트
  • 주니어개발자
  • 스위프트
  • 파이썬
  • watchos
  • menual
  • ios
  • swfit
  • 의존성주입
  • XCode
  • 알고리즘
  • 사이드프로젝트
  • 리뷰요청하기
  • 메뉴얼
  • 파이썬 알고리즘 인터뷰
  • tuist
  • Swift
  • Dependency Injection

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev-signer

개자이너

[Swift] Enum2
iOS/Swift

[Swift] Enum2

2022. 12. 26. 14:30

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
    'iOS/Swift' 카테고리의 다른 글
    • [Swift] 프로퍼티(Property)
    • [Swift] 상속
    • [Swift] Tuple
    • [Swift] Enum
    dev-signer
    dev-signer

    티스토리툴바