티스토리 뷰
함수를 많이 만들고 함수의 기능이 점점 많아지고 연결된 다른 연산들이 많을 경우 함수로 진입하기 위한 조건과 종료할 때 처리해 줘야 할 일들이 점점 더 많이 생긴다. 그래서 이 두가지를 함수의 시작과 끝에서 처리해 주어야 하는데 swift는 이 동작을 위한 문법도 제공한다.
guard
if문과 거의 동일한 문법, 동일한 내용이다. 단, 함수 시작 부분에 함수 진입조건을 검사할 때 guard를 사용하면 다른 사람으로 하여금 코드를 다시 읽었을 때 함수의 진입조건이 무엇이고, 어디서부터 함수의 진짜 내용인지 쉽게 알 수 있게 한다.
함수의 시작이라고 했지만 실제 동작은 함수 맨 위에서부터 순서대로 실행하다가 guard를 실행한다. if의 경우 let으로 optional binding을 하면 if 밖에서는 바인딩한 변수에 접근할 수 없는 지역변수로 선언되는데, guard의 경우 optional 변수를 바인딩해도 guard 밖에서, 즉 함수 내에서 계속 사용할 수 있다.일반 if와 한가지 다른 점은 논리식이 if not 형태로 들어간다는 점이다.
func divide(op1: Double, op2: Double) -> Double {
// return nil if op2 is 0.0
guard op2 != 0.0 else {
return nil
}
return op1 / op2
}
if let result = divide(op1: 5.0, op2: 0.0) {
print("result : \(result)")
} else {
print("second operand is zero")
}
// second operand is zero
op2가 0이기 때문에 나누기를 할 수 없어서 nil을 반환한다. guard의 조건식이 op2 != 0.0 else 인 것을 유의하자.
defer
함수를 종료할 때 swift 내부적으로 가장 마지막에 수행하는 명령들이 담기는 블록이다. 즉, defer로 묶인 코드는 그 위치가 어디에 있든, 함수 가장 마지막에 실행된다.함수 내부에서 파일을 열었을 때 등 사용하면 좋은 기능이다.
func writeToFile(word: String) {
// open file...
// write to file
// defer run last of function
defer {
close(file)
}
// do something
}
우선순위
defer는 함수가 종료할 때 실행된다고 했는데 그럼 guard에 의해서 함수가 종료할 때는 어떻게 될까?
func priority(index: Int) {
guard index > 0 else {
print("index is lower than zero.")
return
}
print("function work fine :)")
defer {
print("I am defer code")
}
}
위 함수를 호출해 보면서 우선순위를 확인할 수 있다.
priority(index: 5)
// function work fine :)
// I am defer code
priority(index: -5)
// index is lower than zero.
결과에서 알 수 있듯이 guard에 의해 함수가 종료되면 defer가 실행되지 않는다.
'Programming > Swift' 카테고리의 다른 글
Swift Beginner | 인터페이스 (0) | 2020.11.18 |
---|---|
Swift Beginner | 타입캐스팅 is as (0) | 2020.11.18 |
Swift Beginner | Closure (0) | 2020.11.18 |
Swift Beginner | 함수(2) (0) | 2020.11.18 |
Swift Beginner | 함수(1) (0) | 2020.11.18 |
- Total
- Today
- Yesterday
- game
- DesignPattern
- C/C++
- JSP
- 국내여행
- swift
- Java
- SHADER
- ue4
- 알고리즘
- rxswift
- machine learing
- ios
- 운영체제
- C
- Git
- SOCKET
- 자료구조
- scala
- Cocos2d-x
- 드라마
- database
- winsock
- mongoDB
- C++
- SwiftUI
- OS
- 데이터베이스
- 수학
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |