part1. 흐름제어_조건문

구름코딩·2020년 8월 29일
0

조건문

if 구문

if 구문에서 조건에 소괄호를 씌우는 것은 선택사항

import Foundation

public func chapter6() {
    print("==================== chapter 6 ====================\n\n")
    흐름제어()
}

public func 흐름제어() {
    print("if구문\n")
    
    let left: Int = 100
    let right: Int = 90
    
    if left > right {
        print("left var is large")
    }

switch 구문

  • switch구문에서 조건에서 소괄호 또한 선택사항
  • break를 넣지않아도 해당 case절이 실행되면 다음 case구문은 실행되지 않고 종료된다
  • default절을 꼭 넣어줘야한다 (enum과 같은 입력값이 제한된 경우를 제외하고는)
  • case 조건에 ,(쉼표)를 사용하여 다양한 조건을 하나의 case에 넣을수있다
  • fallthrough를 사용하면 case가 끝나고나서도 다음 case로 넘어갈수 있다
    print("\nswitch구문\n")
    
    /*
     switch input_value {
     case compare_1:
        exectue_
     case compare_2:
        execute_
        fallthrough //compare_2의 case가 종료되어도 자동으로 끝나지 않고 밑의 case 진행
     case compare_3, compare_4, compare_5: //한꺼번에 여러값과 비교
        execute_
        break; //선택사항 없어도 알아서 case종료와 함께 switch구문 종료
     default:
        execute_
     }
     */
    let val: Int = 100
    
    switch val {
    case ..<10:
        print("small number>\(val)")
    case 10..<100:
        print("10이상 100미만의 수>\(val)")
    case 100...:
        print("100이상의 수>\(val)")
    default:
        print("수가 아닌 그외의 값>\(val)")
    }
    
    //값 바인딩을 사용한 튜플 switch case
    print("\n값 바인딩을 사용한 튜플 switch case\n")
    
    typealias nameAge = (name: String, Age: Int)
    
    let woonsik: nameAge = (name: "woonsik", Age: 27)
    
    switch woonsik {
    case ("woonsik", 26):
        print("nice to meet you \(woonsik.name), are you \(woonsik.Age) years old?")
    case ("woonsik", _):
        print("nice to meet you \(woonsik.name), how old are you?\nre: maybe \(woonsik.Age)")
    case (_, 26):
        print("your age is 26 what is your name?\nre my name is \(woonsik.name)")
    default:
        print("i don't know who you are")
    }
    
    print("\nwhere를 사용하여 switch case 확장\n")
    
    let 직급: String = "사원"
    let 연차: Int = 1
    let is인턴: Bool = true
    
    switch 직급 {
    case "사원" where is인턴 == true:
        print("저는 인턴입니다")
    case "사원" where is인턴 == false && 연차 < 3:
        print("저는 새내기 사원입니다")
    case "사원" where is인턴 == false && 연차 >= 3:
        print("저는 사원입니다")
    case "대리":
        print("저는 대리입니다")
    default:
        print("나를 몰라?")
    }
    
    print("\n열거형을 입력값으로 받는 switch 구문\n")
    
    enum School {
        case 유치원, 중학교, 고등학교, 대학교, 졸업, 미취업
    }
    
    let 최종학력: School = School.유치원
    
    switch 최종학력 {
    case .유치원:
        print("최종학력은 \(School.유치원)입니다.")
    case .중학교:
        print("최종학력은 \(School.중학교)입니다.")
    case .고등학교:
        print("최종학력은 \(School.고등학교)입니다.")
    case .대학교:
        print("최종학력은 \(School.대학교)입니다.")
    case .졸업:
        print("최종학력은 \(School.졸업)입니다.")
//    default:
//        print("미취학아동입니다")
//  enum과 같은 열거형의 경우 올수 있는 case가 이미 명확하므로 따로 default를 설정해주지 않아도 된다 (어짜피 해놔도 실행될일이 없으므로)
    case .미취업:
        print("최종학력은 \(School.미취업)입니다.")
//    @unknown case _:
//        print("최종학력이 무엇입니까?")
        //unknown속성으로 만약 열거형 변수에 요소가 변경될 경우를 대비해 모든 경우에 대해 처리할 수 있도록 해준다
        //만약 열거형에 추가된 값에 대해 처리하지 않는 경우가 존재할경우를 대비해 @unknown 속성을 추가해준다 (논리적 오류 방지)
    }

반복문

for-in 구문

    // 반복문
    print("\n 반복문 \n")
    
    // for - int 구문
    print("\n for-in 구문\n")
    
    /*
     for 임시상수 in 시퀀스아이템 {
        실행코드
     }
     */
    
    for i in 0...2 {
        print(i)
    }
    
    for i in 0...5 {
        if i.isMultiple(of: 2) {
            print(i)
            continue
        }
        print("\(i) is 홀수")
    }
    
    print("\n기본 데이터 타입의 for-in반복 구문 사용\n")
    
    //Dictionary
    print("dictionary_1")
    let friends : [String: Int] = ["woonsik": 26, "byeori": 23, "jongjin": 26]
    for tuple in friends {
        print(tuple)
    }
    print()
    for tuple in friends {
        if (tuple.value == 26) {
            print(tuple)
        }
    }
    print("dictionary_2")
    let 주소 : [String: String] = ["도": "경기도", "시군구": "안양시 동안구", "동읍면": "관양동"]
    for (키, 값) in 주소 {
        print("\(키) : \(값)")
    }
    
    print("Set_1")
    let 지역번호: Set<String> = ["02", "031", "032", "033", "041", "042", "043", "051", "052", "053", "054", "055", "061", "062", "063", "064"]
    for 번호 in 지역번호 {
        print(번호)
    }

while구문

    //while문
    print("\nwhile 구문\n")
    
    var names: [String] = ["Woonsik", "Byeori", "JongJin"]
    
    while names.isEmpty == false {
        print("Good Bye \(names.removeFirst())~!")
    }

repeat-while문

    //repeat-while문
    print("\nrepeat while\n")
    //do while문과 같은 형태이다
    //최초 1회 실행 후 while 조건이 성립하면 블록내의 코드를 반복 (1회 실행 보장)
    
    names = ["Woonsik", "Byeori", "JongJin"]
    
    repeat {
        print("welcome to my home \(names.removeFirst())!")
    } while names.isEmpty == false

구문 이름표

  • 특정 반복구문에 대해 이름을 명시해서 해당 이름을 통해 반복문을 종료시킬수 있다
    //구문 이름표
    print("/n구문 이름표\n")
    
    var numbers: [Int] = [1,2,3,4,10,100,101,1002,333,444,4343]
    
    numbersLoop: for num in numbers {
        if num < 0 || num > 10 {
            continue
        }
        var count: Int = 0
        
        printLoop: while true {
            print(num)
            count += 1
            if count == num {
                break printLoop
            }
        }
        
        removeLoop: while true {
            if num != numbers.first {
                continue
            }
            numbers.removeFirst()
            break removeLoop
        }
    }
    print(numbers)
    함수 실행 후 변경된 배열의 요소
    //[100, 101, 1002, 333, 444, 4343]
}
profile
내꿈은 숲속의잠자는공주

0개의 댓글

관련 채용 정보