ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 5.6 Control Flow
    기술/iOS 2022. 2. 26. 16:15

    Control Flow

    For-In Loops

    배열에 아이템, 범위의 숫자, 또는 문자열에 문자 같은 연속된 것에 대해 for-in 루프를 사용하여 반복할 수 있습니다.

    시퀀스로부터 각 값이 필요하지 않으면 변수 이름 위치에 언더바를 사용하여 값을 무시할 수 있습니다.

    let base = 3
    let power = 10
    var answer = 1
    for _ in 1...power {
        answer *= base
    }
    print("\\(base) to the power of \\(power) is \\(answer)")
    // Prints "3 to the power of 10 is 59049"
    

    While Loop

    while 루프는 조건이 false 가 될때까지 구문의 집합을 수행합니다. 이러한 루프는 첫번째 반복이 시작되기 전 반복 횟수를 알 수 없을 때 가장 잘 사용됩니다. Swift 는 두 종류의 while 구문을 제공합니다.

    • while 은 루프가 시작할때마다 조건을 비교합니다.
    • repeat-while 은 루프가 끝날때마다 조건을 비교합니다.

    Conditional Statements

    조건이 포함하는 코드 기반의 다른 조각을 실행할 때 유용한 경우가 있습니다. 이러한 동작을 위해 코드 조건부의 부분을 만들어야 합니다.

    Swift 는 코드에 조건부를 추가하는 방법을 if switch 두개를 제공합니다. if 구문은 가능한 결과가 적은 간단한 조건에 적합하고 switch 구문은 가능한 결과가 여러개이며 더 복잡한 조건에 적합하고 실행해야 할 적절한 코드 분기를 선택해야하는 패턴 매칭 상태에 유용합니다.

    Switch

    switch 구문은 값을 고려하고 가능한 여러 일치 패턴과 비교합니다. 그런 다음 첫번째로 일치하는 패턴을 기반으로 적절한 코드 블럭을 실행합니다. switch 구문은 여러 가능한 상태에 응답하기 위해 if 구문의 대체로 제공합니다.

    모든 switch 구문은 완벽해야 합니다. 이것은 고려중인 타입의 가능한 모든 값은 switch 케이스 중 하나와 일치해야합니다. 그렇지 않은 경우 default 키워드의 기본 케이스를 실행합니다.

    No Implicit Fallthrough

    C 와 다르게 switch 구문은 기본적으로 break 가 실행됩니다.

    특정 switch 케이스의 끝에서 명시적으로 다음 케이스로 떨어뜨리려면 Fallthrough 키워드를 사용합니다.

    Interval Matching

    switch 케이스 안에 간격을 포함하여 확인할 수 있습니다.

    Tuple

    같은 switch 구문에 여러 값인 튜플을 사용할 수 있습니다.

    Value Bindings

    switch 케이스는 일치하는 값 또는 값들을 임시적 상수 또는 변수로 이름을 가질 수 있으며 케이스 바디 안에서 사용할 수 있습니다. 값은 케이스 바디 내부에서 임시적으로 상수 또는 변수로 바인드 되기 때문에 이러한 동작을 값 바인딩이라 합니다.

    let anotherPoint = (2, 0)
    switch anotherPoint {
    case (let x, 0):
        print("on the x-axis with an x value of \\(x)")
    case (0, let y):
        print("on the y-axis with a y value of \\(y)")
    case let (x, y):
        print("somewhere else at (\\(x), \\(y))")
    }
    // Prints "on the x-axis with an x value of 2"
    

    Where

    switch 케이스는 추가 조건으로 where 절을 사용할 수 있습니다.

    let yetAnotherPoint = (1, -1)
    switch yetAnotherPoint {
    case let (x, y) where x == y:
        print("(\\(x), \\(y)) is on the line x == y")
    case let (x, y) where x == -y:
        print("(\\(x), \\(y)) is on the line x == -y")
    case let (x, y):
        print("(\\(x), \\(y)) is just some arbitrary point")
    }
    // Prints "(1, -1) is on the line x == -y"
    

    Compound Cases

    같은 바디를 공유하는 여러개의 케이스는 case 다음 각 패턴 사이 콤마로 구분하여 여러개의 패턴으로 결합될 수 있습니다.

    Control Transfer Statements

    • continue
    • break
    • fallthrough
    • return
    • throw

    Labeled Statements

    Swift 는 복잡한 제어 흐름 구조를 생성하기 위해 루프와 조건 구문 내 다른 루프와 조건 구문을 중첩할 수 있습니다. 그러나 루프와 조건 구문은 모두 실행을 조기 종료하기 위해 break 구문을 사용할 수 있습니다. 따라서 break 구문으로 종료될 뤂나 조건 구문에 라벨을 붙이는 것이 유용할 때가 있습니다. 마찬가지로 여러개의 중첩된 루프를 가지고 있다면 continue 구문에 영향을 받는 루프 라벨을 붙이는 것이 유용할 수 있습니다.

    Early Exist

    if 구문과 같이 guard 구문은 표현식의 부울 값에 따라 구문을 실행합니다. guard 절은 if 구문과는 달리 항상 else 절을 가지고 있습니다.

    조건이 충족되지 않으면 else 안의 코드가 실행됩니다. 이 블럭은 반드시 guard 구문이 존재하는 코드 블럭을 종료하기 위해 제어를 이동해야합니다. return, break, continue, throw 또는 fatalError(_:file:line:) 과 같이 되돌아 가지 않는 함수 또는 메서드 같은 구문으로 제어를 이동할 수 있습니다.

    필요 조건을 위한 guard 구문은 같은 것을 확인하는 if 구문과 비교하여 코드를 더 읽기 좋게 해줍니다. 이를 통해 일반적으로 실행되는 코드를 else 블럭으로 래핑하지 않고 작성할 수 있으며 요구에 충족하지 않는 부분을 요구사항 근처에서 처리할 수 있도록 해줍니다.

    '기술 > iOS' 카테고리의 다른 글

    Swift 5.6 Closures  (0) 2022.03.20
    Swift 5.6 Functions  (0) 2022.03.20
    Swift 5.6 Arrays  (0) 2022.02.26
    Swift 5.6 Strings and Characters  (0) 2022.02.25
    Swift 5.6 Basic Operators  (0) 2022.02.25

    댓글 0

Designed by Tistory.