간략한 스위프트 문법/사용법 정리
🧐 enum(열거형) 기본 사용법
📎 기본 생성
enum Weekday {
case mon
case tue
case wed, thu, fri, sat, sun
}
// 할당
let day: Weekday = Weekday.mon
- 열거형 타입의 이름은 대문자로 시작하는 것을 권장한다.
📎 switch - case
switch day {
case .mon, .tue, .wed, .thu, .fri: // 타입 생략 가능
print("평일")
case Weekday.sat:
print("토요일")
case .sun:
print("일요일")
}
📎 if - else
if day == Weekday.fri {
print("불금!")
} else {
print("불금이 아님 ㅜ")
}
🧐 원시값 (Raw values)
📎 case에 원시값 할당
enum Fruit: Int {
case apple = 0
case grape = 1
case peach = 2
}
print(Fruit.apple)
// 출력: apple
print(Fruit.apple.rawValue)
// 출력: 0
enum School: String {
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university // 초기화를 안해준다면, case의 이름을 그대로 rawValue로 갖는다.
}
print(School.middle.rawValue)
// 출력: 중등
print(School.university.rawValue)
// 출력: university
📎 원시값을 이용한 초기화
- 원시값을 이용해 초기화되는 인스턴스는 반드시 옵셔널 타입이어야 한다.
let apple: Fruit? = Fruit(rawValue: 0)
if let orange: Fruit = Fruit(rawValue: 5) {
print("rawValue 5에 해당하는 케이스는 \(orange)입니다.")
} else {
print("rawValue 5에 해당하는 케이스가 없습니다.")
}
// 출력: "rawValue 5에 해당하는 케이스가 없습니다."
🧐 관련값
각 case마다 추가적인 정보를 저장시켜서, 일종의 데이터 구조처럼 사용할 수 있다.
📎 관련값 설정
enum Media {
case book(title: String, author: String, year: Int)
case movie(title: String, director: String, year: Int)
case website(urlString: String)
}
📎 활용
- 관련값이 설정되어 있는 enum은 반드시 if-case-let 또는 switch-case-let을 통해 사용해야 한다.
- 만약 media 인스턴스가 movie가 아닌 다른 타입이었다면 아무것도 출력되지 않고, 에러 없이 넘어갈 것이다.
let media = Media.movie(title: "Iron Man", director: "Jon Favreau", year: 2008)
switch media {
case let Media.movie(title, _, _):
print(title)
default:
break
}
// 출력: Iron Man
if case let Media.movie(title, director, year) = media {
print(title, director, year)
}
// 출력: Iron Man Jon Favreau 2008
Delphi 또는 Java 등 타 언어에서 사용하는 enum과 가장 큰 차이점인 것 같다.
단순히 데이터의 분류를 위한 구조를 넘어서, struct 혹은 DTO처럼 사용할 수도 있다고 이해하고 넘어갔다.
📎 메서드 생성
또한 Class와 같이 enum 내부에 메서드를 구현해서 사용할 수도 있다.
enum Month {
case dec, jan, feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
func printMessage(){
switch self {
case .mar, .apr, .may:
print("봄")
case .jun, .jul, .aug:
print("여름")
case .sep, .oct, .nov:
print("가을")
case .dec, .jan, .feb:
print("겨울")
}
}
}
print(Month.mar.printMessage())
// 출력: 봄
var jul: Month = Month.jul
print(jul.printMessage())
// 출력: 여름
[예시 코드 출처]
1. 야곰님의 유튜브 강의
2. 스위프트 공식 문서 번역 사이트
3. Crunchy Development
'iOS(macOS) > Swift' 카테고리의 다른 글
[Swift/문법] 익스텐션(Extension) (0) | 2022.08.10 |
---|---|
[Swift/문법] 클래스(Class), 구조체(Structure) (0) | 2022.08.10 |
[Swift/문법] Closure (클로저) (0) | 2022.08.07 |
[Swift/문법] 제어문(Control flow), Function (0) | 2022.08.04 |
[Swift/문법] Collection(Array, Set, Dictionary) (0) | 2022.07.28 |