본문 바로가기
IOS/Swift

[Swift] 제어 변경 구문과 guard 구문

by 얘리밍 2022. 12. 29.
320x100
728x90

 

 

제어 변경 구문

  • continue
  • break
  • fallthrough
 
그리고 라벨 구문과 이른 종료인 guard 구문에 대해 알아보자 

 

 


 

 

1️⃣ continue

 

다음 반복을 실행하라고 알림

아래 예시는 모음이나 빈칸이 나왔을 때, 바로 다음 반복으로 넘어가라고 지시한다. 

 

let sentance = "easy example"
var result = ""
let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in sentance {
    if charactersToRemove.contains(character) {
        continue
    }
    result.append(character)
}
print(result)
// syxmpl

 

 

 


 

2️⃣ break

 

루프의 실행을 즉시 종료한다.

즉, switch 구문을 즉시 빠져나와 실행을 종료한다. 

 

let symbol: Character = "三"  
var val: Int?
switch symbol {
case "1", "一", :
    val = 1
case "2", "٢", "二", :
    val = 2
case "3",  "三", :
    val = 3
case "4", "٤", "四",:
    val = 4
default:
    break
}

print(val)
// 3 출력

 

 


 

3️⃣ Fallthrough

 

continue와 다른 점 : continue는 바로 다음 반복으로 넘어가지만, Fallthrough는 다음 경우(다음 조건) 로 넘어감 

case 5인 경우와 그 다음 케이스인 default 구문으로 넘어가 다음과 같이 출력된다. 

 

let num = 5
var description = "The number \(num) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
print(description)
// 다음과 같이 출력됨 "The number 5 is a prime number, and also an integer."

 

 


 

 

4️⃣ 라벨 구문 

 

예제를 보며 살펴보자 

더보기
let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0

 

 

while 루프에 gameLoop 라는 라벨을 붙였다. 

만약 gameLoop 라벨 없이 그냥 break만 걸었다면, switch 구문만 빠져나오고 while구문은 빠져나오지 않는다. 

아래 예시는 break를 통해 gameLoop 자체를 빠져나온다. 

 

gameLoop: while square != finalSquare {
    diceRoll += 1
    if diceRoll == 7 { diceRoll = 1 }
    switch square + diceRoll {
    case finalSquare:
        // diceRoll will move us to the final square, so the game is over
        break gameLoop
    case let newSquare where newSquare > finalSquare:
        // diceRoll will move us beyond the final square, so roll again
        continue gameLoop
    default:
        // this is a valid move, so find out its effect
        square += diceRoll
        square += board[square]
    }
}
print("Game over!")

 

 


 

5️⃣ guard - else

 

조건을 만족하면(수식이 참이면) 다음 코드로 계속 진행하고, 만족하지 않으면(false 일 때) else 안의 구문을 

실행하고 종료한다.

if와 다르게 else 절을 항상 붙여주어야 한다. 또한, 함수 혹은 반복문 안에서만 사용 가능하다. 

 

guard [expression] else {
	// false일 때 실행되는 부분
}

 

func greet(person: [String: String]) {
	// 1. 
    guard let name = person["name"] else {
        return
    }
    
	// 2.
    print("Hello \(name)!")

	// 3.
    guard let location = person["location"] else {
        print("I hope the weather is nice near you.")
        return
    }
	
    // 4. 
    print("I hope the weather is nice in \(location).")
}

 

 

🔎 ex 1)

 

greet(person: ["name": "John"])

 

1. name 값이 존재하므로 2번 코드로 넘어감

2. Hello John 출력

3. location은 존재하지 않으므로 else 구문 실행하고 해당 함수 종료

 

 

결과 

Hello John!
I hope the weather is nice near you.

 

 

 

🔎 ex 2)

 

greet(person: ["name": "Jane", "location": "Cupertino"])

 

1. name이 존재하므로 2번 코드로 넘어감

2. location 또한 존재하므로 그 다음으로 넘어감

3. 4번 출력 후 함수 종료

 

 

결과 

Hello Jane!
I hope the weather is nice in Cupertino.

 

예외사항만을 처리하고 싶을 때 guard를 사용하면 가독성이 좋아진다. 

guard는 ~이 아니면 끝내라 라는 의미이기 때문이다. 

 

 

 

 

 

 

728x90
반응형