English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift guard 문

이 글에서는 guard 문을 사용하여 프로그램 실행 흐름을 제어하는 방법을 배웁니다.

Swift If 문특정 조건(부울 값)에 따라 작업을 수행하는 방법을 설명합니다. 이 글에서는 guard 문이 if 문보다 우수한 장점을 배우고 프로그램 흐름을 제어하여 더 간단하고 깨끗한 코드를 작성하는 방법을 배웁니다.

Swift guard 문

guard 문의 주요 용도는 특정 조건하에서 프로그램 제어를 특정 범위 밖으로 이동하는 것입니다. 이 문장들은 특정 조건(부울 값)에 따라 문장을 실행하는 if 문과 유사하지만, if와 달리 guard 문은 특정 조건이 만족되지 않을 때만 실행됩니다.

또한, guard 문은 범위에서 탈출해야 합니다. 따라서, guard 문의 마지막에 사용자 프로그램 제어문 return, break, continue 또는 throw를 사용해야 합니다.

guard 문의 문법

guard expression else {
	//문
	//절제어문: return, break, continue 또는 throw를 포함해야 합니다.
}
  • 여기서 expression은 부울 표현식(또는 true 또는 false를 반환)입니다.

  • expression 값이 false로 계산되면, 코드 블록 내의 guard 문장을 실행합니다.

  • expression 값이 true로 계산되면, guard 문장은 코드 블록 내에서 실행을 건너뜁니다.

guard 문장은 어떻게 작동하는가?

주의: guard 문장의 끝은 return, break, continue 또는 throw 컨트롤 문장을 포함해야 합니다.

예제1guard 문장은 어떻게 작동하는가?

간단한 유효한 guard 문장은 다음과 같습니다:

guard true else {
	print("조건이 만족하지 않습니다")
}
print("조건이 만족합니다")

이 프로그램을 실행할 때, 출력은 다음과 같습니다:

조건이 만족합니다

위 프로그램에서 guard는布尔 값 true(조건이 만족)을 포함하고 있습니다. guard 문장은 조건이 만족하지 않을 때만 실행되므로 guard 내부의 문장은 실행되지 않습니다. 이것이 why print("조건이 만족합니다")를 실행하고 화면에 출력된 것입니다조건이 만족합니다의 이유입니다.

지금, 조건을 false로 변경하십시오:

예제2guard 문장은 스코프를 벗어나야 합니다

guard false else {
	print("조건이 만족하지 않습니다")
}
print("조건이 만족합니다")

위 프로그램에서 보호 조건의 계산 결과는 false입니다. 따라서 else 내부의 print("Condition not met") 문장을 실행해야 합니다. 그러나 오류 메시지를 받게 됩니다:'guard' 본문은 빠져 나갈 수 없습니다. 'return' 또는 'throw'를 사용하여 스코프를 벗어나세요.

에러 메시지는 return, break, continue 또는 throw 문장을 사용하여 guard 문장에서 프로그램 제어를 이동해야 한다는 것을 의미합니다. 지금은 return을 사용하겠습니다. return 문장은 함수 내부에서만 사용할 수 있으므로 위의 코드를 Swift 함수로 래핑할 것입니다.

예제3함수 내부의 guard 문장

Swift에서는함수 내부guard 문장의 사용법은 다음과 같습니다:

func someFunction() {
	guard false else {
		print("조건이 만족하지 않습니다")
		return
	}
	print("조건이 만족합니다")
}
someFunction()
print("함수 호출 후 출력 "Hello")

위의 프로그램을 실행하면 다음과 같은 출력이 됩니다:

조건이 만족하지 않습니다
함수 호출 후 출력 "Hello"

위 프로그램에서 guard 조건의 계산 결과는 false이므로 guard 내부의 문장을 실행합니다. 첫 번째 문장 print("조건이 만족하지 않습니다")는 컨솔에 출력됩니다.다만 조건이 충족되지 않는 경우.

return 문이 함수 실행을 종료하며, print("Hello, after function call") 문은 함수 호출 후 컨솔에 출력됩니다:함수 호출 후 출력 Hello.

예제4다중 조건의 guard

우리는Swift Optional에서이미 if를 사용하여 확인했습니다.-let 문을 통해 Optional을 해제할 수 있습니다. 그러나 guard 문을 사용하여 if 대신 사용할 수도 있습니다.-let 문을 통해 선택적 문장을 확장하면 이는 guard 대신 if를 사용하는 장점이 있습니다.-let 문을 통해 선택적 변수를 확장하는 주요 장점은 우리가 확장된 변수의 범위를 늘일 수 있다는 것입니다.

이를 아래의 예제에서 확인해 보겠습니다:

func changeOptionalStringToUpperCase() {
	var name: String?
	guard let temp = name else {
		print("이름이 nil입니다. 처리할 수 없습니다.")
		return
	}
	print("대문자: \(temp.uppercased())")
}
changeOptionalStringToUpperCase()

위의 프로그램을 실행하면 다음과 같은 출력이 됩니다:

이름이 nil입니다. 처리할 수 없습니다.

위의 프로그램에서는 包装되지 않은 값 temp가 guard 문 정의된 범위 밖에서 사용되고 있습니다. name가 선택적이고 nil 값을 포함하고 있기 때문에 guard 문이 이 값을 unpacking할 수 없습니다.

따라서 guard else 블록에서 실행되는 문장은 Name이 nil입니다. 출력에서 처리할 수 없으며 함수를 종료하는 return 문을 사용합니다. 위의 guard 문과 if else 문의等效 코드는 다음과 같습니다:

func changeOptionalStringToUpperCase() {
    
	var name: String?
	if let temp = name {
		print("대문자: \(temp.uppercased())")
	}
		print("이름이 nil입니다. 처리할 수 없습니다.")
		return
    }
	//여기서 어떻게 접근할 수 있을까요? 솔루션: guard 사용
}
changeOptionalStringToUpperCase()

주의하세요, 위 두 문장은 모두 유효하며 동일한 작업을 수행합니다. 그러나 if 문을 사용하면:-let 문에서는 if 문 내에서는 사용할 수 없습니다.-let 문 이외의 부분에서는 包装되지 않은 값(unwrapped)을 사용할 수 있습니다. 그러나 guard 문을 사용하면 함수 내에서 包装되지 않은 값을 사용할 수 있습니다.

예제5다중 조건의 guard

Guard 문은 여러 조건을 연결할 수 있으며, 이 조건들은 콤마(,)로 구분됩니다. 예를 들어:

func changeOptionalStringToUpperCase() {
	var name: String? = ""
	guard let temp = name, temp.count > 0 else {
		print("이름이 nil 또는 빈 문자열입니다. 처리할 수 없습니다.")
		return
	}
	print("Uppercased:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()

위의 프로그램을 실행하면 다음과 같은 출력이 됩니다:

이름이 nil 또는 빈 문자열이면 처리할 수 없습니다.

위의 프로그램에서 guard 문은 콤마로 구분된 두 개의 조건을 포함하고 있습니다.

첫 번째 조건 let temp = name는 선택형 매개변수를 해제하며, 우리의 예제에서는 이 조건이 true를 반환합니다. 두 번째 조건 temp.count > 0는 해제된 문자열이 0개 이상의 문자를 포함하는지 확인하며, 우리의 예제에서는 결과가 false입니다.

따라서 guard 문 내의 문장은 실행 문장  print("이름이 nil 또는 빈 문자열이면 처리할 수 없습니다.") ، 그 출력 Name이 nil 또는 빈 문자열이면 처리할 수 없습니다. 컨트롤台中 처리할 수 없으며 return 문을 사용하여 함수를 종료합니다.