TIL 0108 - Extensions 서브스크립트, 중첩 타입

ian·2022년 1월 8일
0

TIL

목록 보기
6/11
post-thumbnail

확장으로 서브스크립트까지 추가가 가능하다는 사실..!

약간 코딩테스트 공부하는 것 같아서 알아보면서 재미있었음! 진짜ㅎㅎ;;ㅋㅋ..!!


extension Int {
    subscript(num: Int) -> Int {
        var decimalBase = 1
        
        for _ in 0..<num {
            decimalBase *= 10
        }
        
        return (self / decimalBase) % 10
    }
}

123456789[0]      // (123456789 / 1) ==> 123456789 % 10 ==> 나머지 9
123456789[1]      // (123456789 / 10) ==> 12345678 % 10 ==> 나머지 8
123456789[2]      // (123456789 / 100) ==> 1234567 % 10 ==> 나머지 7
123456789[3]      // (123456789 / 1000) ==> 123456 % 10 ==> 나머지 6

어제 공부한 것 처럼 Int 타입일 때 subscript 를 사용하여 확장을 구현했다!

Int 타입 숫자를 쓰고 [] 안에 숫자를 집어 넣으면 -> 뒷쪽부터 index가 0으로 시작하는 index를 찾을 수 있습니다 !


다음으론 클래스, 구조체 및 열거형에 새 중첩 유형을 추가 가능하다는 것을 아시나요 ?!

바로 이렇게용

extension Int {
    
    enum Kind {       // 음수인지, 0인지, 양수인지
        case negative, zero, positive
    }
    
    var kind: Kind {    // 계산 속성으로 구현
        switch self {
        case 0:                   // 0인 경우
            return Kind.zero
        case let x where x > 0:   // 0보다 큰경우
            return Kind.positive
        default:                  // 나머지 (0보다 작은 경우)
            return Kind.negative
        }
    }
}

let a = 1
a.kind       // 숫자 1의 (인스턴스) 계산속성을 호출 ====> 해당하는 열거형(Int.Kind타입)을 리턴

let b = 0
b.kind

let c = -1
c.kind

Int.Kind.positive
Int.Kind.zero
Int.Kind.negative

let d: Int.Kind = Int.Kind.negative

// 위의 확장을 통해서, 어떤 Int값에서도 중첩 열거형이 쓰일 수 있음

func printIntegerKinds(_ numbers: [Int]) {
    for number in numbers {
        switch number.kind {
        case .negative:
            print("- ", terminator: "")
        case .zero:
            print("0 ", terminator: "")
        case .positive:
            print("+ ", terminator: "")
        }
    }
    print("")
}

printIntegerKinds([3, 19, -27, 0, -6, 0, 7])      // + + - 0 - 0 +

학습 키워드

  • Extensions의 서브스크립트
  • Extensions의 중첩 타입

TIL 시리즈는 막연히 제가 배운 걸 기록하는 공간입니다.


출처:
앨런 swift 문법 마스터 스쿨

profile
디자인씽킹을 하며 iOS 를 공부합니다

0개의 댓글