Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Observable
- Human interface guide
- tableView
- combine
- Xcode
- 리팩토링
- uitableview
- ribs
- collectionview
- clean architecture
- UITextView
- 리펙터링
- HIG
- ios
- map
- 리펙토링
- UICollectionView
- Clean Code
- uiscrollview
- swiftUI
- SWIFT
- rxswift
- Refactoring
- RxCocoa
- swift documentation
- MVVM
- 클린 코드
- Protocol
- 애니메이션
- 스위프트
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] enum 생성자, 초기화 사용하는 방법 (패턴 매칭, Pattern Matching) 본문
iOS 응용 (swift)
[iOS - Swift] enum 생성자, 초기화 사용하는 방법 (패턴 매칭, Pattern Matching)
jake-kim 2022. 10. 9. 21:25Enum 생성자 사용
- enum도 class와 struct와 같이 초기화하여 사용할 수 있도록 하는 방법이 존재
ex) 과일 이름 문자열 값을 enum타입의 생성자로 넣으면, 과일 타입으로 나오게끔 하는 방법
let fruit = "apple"
let type = Fruit(fruit)
print(type) // Optional(Fruit.apple)
enum 생성자 사용 방법
- enum 준비
enum Fruit {
case apple
case banana
case orange
}
- switch문을 통하여 case타입을 초기화 하는 방식이기에, 내부적으로 초기화할때 사용할 각 타입에 따른 이름 값 정의
private var nameValue: String {
switch self {
case .apple:
return "apple"
case .banana:
return "banana"
case .orange:
return "orange"
}
}
- 초기화에 사용할 init 구문과, switch문을 사용하려면 Pattern Matching 방법을 사용하기 때문에, ~= 연산자를 정의
init?(_ name: String) {
switch name {
case .apple:
self = .apple
case .banana:
self = .banana
case .orange:
self = .orange
default:
return nil
}
}
static func ~=(lhs: Self, rhs: String) -> Bool {
return lhs.nameValue == rhs
}
완성)
let fruit = "banana"
let type = Fruit(fruit)
print(type) // Optional(Fruit.banana)
위 패턴을 사용하는 경우
- 앱 딥링크 처리를할때 문자열 url을 파싱해서 어떤 딥링크인지 판단할때 위 방법을 사용
- 문자열을 받아서 특정 타입으로 초기화
- 사용자가 핸드폰 번호, 패스워드, 이름 정보등 문자열을 입력했을때 핸드폰 번호인지, 패스워드인지, 이름 정보인지 타입을 구분할때도 사용
* 전체 코드: https://github.com/JK0369/ExEnum
'iOS 응용 (swift)' 카테고리의 다른 글
Comments