관리 메뉴

김종권의 iOS 앱 개발 알아가기

[swift] 10. 열거형과 익스텐션 본문

swift 5 문법

[swift] 10. 열거형과 익스텐션

jake-kim 2020. 3. 29. 15:12

1. 열거형

 - 열거형을 이용하여 데이터 타입을 정의하면 컴파일 오류로 찾아내는데 용이 ( 배열과 같은 집단 자료형은 런타임 오류 발생)

 1) 사용방법

1
2
3
4
5
6
7
8
9
enum MyEnum {
    case ABC
    case B
    case C, D
}
 
let a = MyEnum.ABC
print(a) // ABC
let b: MyEnum = .B // 열거형을 선언시, 생략하여 사용 가능
 

 

 - 타입이 지정된 enum : 값에 접근하는 경우는 rawValue로 접근

1
2
3
4
5
6
7
8
9
10
enum MyEnum: Int {
    case ABC = 123
    case B = 2
    case C = 4
}
 
let a: MyEnum = .ABC
print(a) // ABC
print(a.rawValue) // 123
 
 

 

 - 값 +1씩 자동할당 : 

1
2
3
4
5
6
7
8
9
enum MyEnum: Int {
    case ABC = 123
    case B = 10
    case C
}
 
let a: MyEnum = .C
print(a.rawValue) // 11
 
 

 

- 클래스 처럼 사용 : 단, 인스턴스를 만들 수 없음

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
enum MyEnum: Int {
    
    // 저장 프로퍼티 사용
    case ABC = 123
    
    // 연산 프로퍼티 사용
    var value: Int{
        return 1
    }
    
    // 메서드 사용
    func printValue(s : Int-> () {
        print("입력 값=\(s)")
    }
    
    // 타입 메서드 사용
    static func getName() -> String {
       return "abc"
    }
}
 
var m: MyEnum = .ABC
m.printValue(s: 10// 입력 값 = 10
MyEnum.getName() // abc
 
 
 

2. 익스텐션(Extensions)

 - 기존 객체에 연산 프로퍼티와 메서드 추가 가능 ( 저장 프로퍼티는 불가, 오버라이딩 불가, @IBAction 붙는 액션 메소드는 불가 )

1
2
3
4
5
6
7
8
9
10
11
12
13
// Double이라는 자료형(클래스)에 추가
extension Double { // self시, Double 객체를 참조
    // 저장프로퍼티로 확장
    var km: Double { return self * 1_000.0// 언더바는 아무런 의미 없고 가독성을 위해 존재
    var description: String {
        return "\(self)km는 \(self.km)m입니다."
    }
}
 
let distance = 42.0.km
print(distance) // 42000.0
print(distance.description) // 42000.0km는 42000000.0m입니다.
 
 
 

- 메서드 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Double이라는 자료형(클래스)에 추가
extension Int { // self시, Double 객체를 참조
    func printValue(sum value: () -> Void){
        for _ in 0 ..< self{
            value()
        }
    }
    
    // 수정하려면 mutating키워드 붙일 것
    mutating func plus(){
        self = self+1
    }
}
 
5.printValue {
    print("이것은 클로저 표현식")
}
 
//  mutating키워드 함수는 값이 바뀌어야 하므로 let이나 상수리터럴 값 그대로 사용하면 오류
5.plus() // error
 
var tmp = 5
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

3. 주석 MARK

 코드 상의 위치를 점프바에 표현해주며, 하이픈 MARK는 수평선 생성

// MARK: 내용

// MARK - 내용

Comments