반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • Java
    • ios
    • xcode
    • 타입
    • reduce
    • 개발
    • IT
    • 공부
    • swift
    • Android
    • 예제
    • map
    • 프로그래밍
    • JSP
    • 코딩테스트
    • level1
    • 프로그래머스
    • 구축
    • kotlin
    • swfit

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026
    Language/Swift

    Swift 다양한 switch-case 패턴들

    Swift 다양한 switch-case 패턴들
    Language/Swift

    Swift 다양한 switch-case 패턴들

    2021. 3. 9. 20:43
    반응형

    *현재 작성중인 문서입니다.

    열거형 케이스 패턴, 옵셔널 패턴, 타입캐스팅 패턴, 표현 패턴

    은 차후 작성할 계획입니다.

     

    ,를 사용해 여러개 지정

    //무작위로 0~10 사이의 숫자를 지정합니다.
    let ranNum = Int.random(in: 0...10)
    
    switch ranNum {
    case 1,3,5,7,9:
        print( "홀수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
    case 2,4,6,8,10:
        print( "짝수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
    case 0:
        print( "0를 뽑았습니다." ) 
    default:
        print("unknown error")
    }

     

    범위연산자 사용

    //무작위로 0~10 사이의 숫자를 지정합니다.
    let ranNum = Int.random(in: 0...10)
    
    switch ranNum {
    case 0..<3:
        print( "작은 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
    case 3..<6:
        print( "적당한 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
    case 6..<11:
        print( "큰 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
    default:
        print("unknown error")
    }

     

    튜플 패턴

    func makePoint() ->Int{
        var a = Int.random(in: 0...2)
        var b = Int.random(in: 0...2)
    
        return a-b
    }
    let x = makePoint()
    let y = makePoint()
    
    // _는 어느 값이든 상관없을때 사용하는 와일드카드 패턴입니다.
    switch x, y{
    case (0, 0):
        print( "(\(x), \(y) )는 원점입니다." )
    case (_, 0):
        print( "(\(x), \(y) )는 x축에 닿아 있습니다. " )
    case (0, _):
        print( "(\(x), \(y) )는 y축에 닿아 있습니다." )
    case (-2...2, -2...2):
        print( "(\(x), \(y) )는 어느축에도 닿지 않습니다.")
    default:
        print( "unkown error" )
    }
    
    
    //직접 튜플을 만들어서 넣어봤습니다.
    func makePointTule() ->(Int,Int){
        var a = Int.random(in: 0...2)
        var b = Int.random(in: 0...2)
    
        return (a-b, a+b)
    }
    
    switch makePointTule(){
    case (0, 0):
        print( "\( makePointTule() )는 원점입니다." )
    case (_, 0):
        print( "\( makePointTule() )는 y축에 닿아 있습니다. " )
    case (0, _):
        print( "\( makePointTule() ) x축에 닿아 있습니다." )
    case (-2...2, -2...2):
        print("\( makePointTule() )는 어느축에도 닿지 않습니다.")
    default:
        print( "unkown error" )
    }

     

    벨류 바인딩 패턴

    switch문에 튜플을 사용할때 벨류 바인딩 패턴을 사용할 수 있습니다.

    명명된 변수 또는 상수를 일치하는 값에 바인딩합니다.

    func getPoint(point:(Int,Int)){
        switch point{
        case (0, 0):
            print( "\(getPoint) 는 원점입니다." )
        case (let x, 0):
            print( "점은 y축에 닿아 있으며, x값은 \(x) 입니다." )
        case (0, let y):
            print( "점은 x축에 닿아 있으며, y값은 \(y) 입니다." )
        case (let x, let y):
            print("(\(x), \(y))는 어느축에도 닿지 않습니다.")
        default:
            print( "error" )
        }
    }
     
    getPoint(point:(3,0)) //점은 y축에 닿아 있으며, x값은 3 입니다.
    getPoint(point:(0,3)) //점은 x축에 닿아 있으며, y값은 3 입니다.
    getPoint(point:(3,3)) //(3, 3)는 어느축에도 닿지 않습니다.

    개인적으로 이해가 한참 안되서 한참을 이리저리 해봤네요.ㅠㅠ

    말로 조금 풀어서 설명하자면, g

    getPoint(3, 0) 이면 case (let x, 0) 케이스에 해당되고, lex x = 3으로 바인딩된다는 얘기입니다.

    getPoint(0, 3) 이면 case( 0, let y)에 걸리게 되고, let y = 3으로 바인딩되며,

    getPoint(3, 3)이면 case (let x, let y)에 걸려 let x = 3, let y =3으로 바인딩됩니다.

    이렇게 바인딩을 하면 내부에서 자체생성한 변수를 사용할 수 있죠.

     

    참고로, 바인딩은 프로그램의 각종 변수값들이 실제 값으로 묶는 것입니다. ㅎㅎ..

     

    where절 사용 패턴

    where문을 추가해 조건을 더욱 세분화 할 수 있습니다.

    위의 벨류바인딩 패턴도 같이 사용해보겠습니다.

    where절은 패턴과 결합하여 조건을 추가하거나

    타입에 대한 제약을 추가하는 용도로 사용됩니다.

    func wherePoint(point:(Int,Int)){
        switch point{
        case let (x, y) where x == y:
            print( " ( \(x), \(y) )는 x=y 직선상의 점입니다.  " )
        case let (x, y) where x == -y:
            print( " ( \(x), \(y) )는 x=-y 직선상의 점입니다.  " )
        default:
            print( "점들은 좌표평면 어딘가에 있습니다" )
        }
    }
    
    wherePoint(point:(3,3)) //( 3, 3 )는 x=y 직선상의 점입니다.
    wherePoint(point:(1,-1)) //( 1, -1 )는 x=-y 직선상의 점입니다.
    wherePoint(point:(2,3)) //점들은 좌표평면 어딘가에 있습니다

     

     

     

     

     

    작성예정{

    열거형 케이스 패턴

    옵셔널 패턴

    타입캐스팅 패턴

    표현 패턴

    }

     


    공부에 도움을 준 웹페이지들

     

    apple 공식 문서

    https://docs.swift.org/swift-book/ReferenceManual/Patterns.html#//apple_ref/doc/uid/TP40014097-CH36-ID419

     

    Patterns — The Swift Programming Language (Swift 5.4)

    Patterns A pattern represents the structure of a single value or a composite value. For example, the structure of a tuple (1, 2) is a comma-separated list of two elements. Because patterns represent the structure of a value rather than any one particular v

    docs.swift.org

    switch-case문 예제

    https://www.hohyeonmoon.com/blog/swift-switch-case/

     

    Swift Switch-Case문 | Hohyeon Moon

    Swift에서 Swift-Case문을 사용하는 방법에 대해 알아봅니다.

    www.hohyeonmoon.com

     

    더 다양한 패턴

    https://blog.naver.com/PostView.nhn?blogId=taerg89&logNo=221724132490

     

    [iOS] Swift 패턴, where 절

    ​​이제 스터디 준비한다고 책을 펼치려고 하면 반 이상 뚝 떼 가지고 넘겨야 합니다 굉장히 뿌듯합니다​...

    blog.naver.com

     

    반응형

    'Language > Swift' 카테고리의 다른 글

    Swift 옵셔널  (0) 2021.03.11
    Swift 반복문  (0) 2021.03.10
    Swift의 조건문  (0) 2021.03.09
    Swift 함수 고급  (0) 2021.03.09
    Swift 간단한 사칙연산  (0) 2021.03.09
    • ,를 사용해 여러개 지정
    • 범위연산자 사용
    • 튜플 패턴
    • 벨류 바인딩 패턴
    • where절 사용 패턴
    'Language/Swift' 카테고리의 다른 글
    • Swift 옵셔널
    • Swift 반복문
    • Swift의 조건문
    • Swift 함수 고급
    Greensky0026
    Greensky0026
    점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.