Suyeon9911 / TIL

매일 오전에 적는 미라클 TIL 🥣
10 stars 0 forks source link

[Swift] 흐름제어 #75

Closed Suyeon9911 closed 1 year ago

Suyeon9911 commented 1 year ago

조건문, 반복문

조건문

1. if 구문은 조건의 값이 꼭 Bool 타입이어야합니다

  1. else if는 몇개어도 상관없고 else 생략가능
  2. 조건 수식 소괄호 생략가능
  3. swithc도 소괄호 생략가능 break 선택사항
  4. case 내부의 코드를 모두 실행하면 break 없이도 switch 구문 종료
  5. 스위프트에서 switch구문의 case를 연속실행하려면 fallthough 키워드를 사용함
  6. C언어는 switch 구문에 정수타입만 가능하나 스위프트는 다양한 값이 들어갈 수 있다.
  7. 비교될 값과 입력값이 같은 데이터 타입임을 지켜주자 9. 비교될 값이 명확히 한정적인 열거형같은 값이 아닐경우 default를 꼭 작성해줘야한다.
  8. 각 case에는 범위 연산자를 사용할수도, where절을 사용하여 조건을 확장할 수도 있다.
let integerValue: Int = 5

switch integerValue {
case 0:
    print("zero")
case 1...10:
    print("1~10")
    fallthrough
case Int.min..<0, 101..<Int.max:
    print("<0 , >100")
    break
default:
    print("10< <= 100")
}
typealias NameAge = (name: String, age: Int)

let tupleValue: NameAge = ("yagom", 99)

switch tupleValue {
case ("yagom", 50):
    print("맞춤")
case ("yagom", _):
    print("이름만 맞춤 나이는 \(tupleValue.age)")
case (_, 50):
    print("나이만 맞춤 이름은 \(tupleValue.name)")
default:
    print("틀림")
}

// let을 붙인 값 바인딩

switch tupleValue {
case ("yagom", 50):
    print("맞춤")
case ("yagom", let age):
    print("이름만 맞춤 나이는 \(age)")
case (let name, 50):
    print("나이만 맞춤 이름은 \(name)")
default:
    print("틀림")
}

where를 사용하여 case의 조건을 확장할 수 있다.


let 직급: String = "사원"
let 연차: Int = 1
let 인턴인가: Bool = false

switch 직급 {
case "사원" where 인턴인가 == true:
    print("인턴입니다.")
case "사원" where 연차 < 2 && 인턴인가 == false:
    print("신입사원입니다")
case "사원" where 연차 > 5:
    print("연차 좀 된 사원")
}

만약, 이후에 열거형에 case가 추가될 경우 ? 컴파일오류 발생 스위프트 5.0 버전에서 추가된 unknown이라는 속성으로 대처

let lunchMenu: Menu = .chicken

switch lunchMenu {
case .chicken:
    print("치킨")
case .pizza:
    print("피자")
case _: // default와 같은 표현
    print("메뉴 뭐임")
}

// 나중에 case를 추가해도 컴파일 오류가 발생하지 않음. 
// 그러나 논리적 오류 발생 여지를 위해서 unknown 속성을 추가하여 컴파일러가 경고를 주도록하자

switch lunchMenu {
case .chicken:
    print("치킨")
case .pizza:
    print("피자")
@unknown case _: // default와 같은 표현
    print("메뉴 뭐임")
}

// ㅎ차후에 열거형에 추가한 case를 처리하지 않으면 경고를 내어주는 unknown  속성
Suyeon9911 commented 1 year ago

반복문

  1. for-in 구문

    • continue 키워드를 사용하면 바로 다음 시퀀스로 건너뜀
    • 시퀀스에 해당하는 값이 필요없다면 와일드카드 사용
    • 딕셔너리는 넘겨받는 값의 타입이 튜플로 지정되어 넘어온다
    • (키, 값) 튜플 형태로 받아서 하나씩 출력 가능
    • 스위프트에 익숙해져서 함수형 프로그래밍 패러다임을 이해하면 for-in 구문보다 map, filter, flatmap등을 더 ㅁ낳이 사용하게 될 것.!
  2. while 구문

    • 특정 조건이 성립하는 함 블록 내부의 코드 반복
      
      var names: [String] = ["1", "2", "3" "4"]

while names.isEmpty == false { print("good bye (names.removeFirst())") }

  1. repeat-while 구문
    • repeat 블록의 코드를 최초 1회 실행 후 while 조건이 성립하면 블록 내부 코드 반복

구문 이름표


var numbers: [Int] = [3, 2342, 6, 3252]

numbersLoop: for num in numbers {
    if num > 5 || num < 1 {
        continue numbersLoop
    }

    var count: Int = 0
    printLoop: while true {
        print(num)
        count += 1

        if count == num {
            break printLoop
        }
    }

    removeLoop: while true {
        if numbers.first != num {
            break numbersLoop
        }
        numbers.removeFirst()
    }
}