[Swift 문법] 리턴 생략(Omit Return) (SE-02555) 은 언제 가능할까?
리턴 생략(Omit Return) (SE-02555)
단일 표현식(single-expression)이 사용된 함수에 대해 클로저와 동일하게 리턴return) 키워드 생략이 가능합니다.
단일 표현식이 단일 행을 의미하는 것이 아니니 주의합니다. 코드 작성시 여러 행으로 작성하여도 결국 하나의 값을 반환하는 단일 표현식에 해당 됩니다. 다음 예제들로 살펴봅니다.
1. 두 개의 매개 변수를 더해 반환하는 sum클로저
let sum = { (a: Int, b: Int) } in
a + b
}
2. 두 개의 매개 변수를 더해 반환하는 sum함수
함수의 경우에도 반환해야하는 타입이 있으면 반드시 명시해주어야 했으나 Swfit에서는 함수의 리턴 키워드 역시 생략 가능합니다.
func sum(a: Int, b: Int) -> Int {
a + b // 함수 역시 return 생략 가능
}
3. 프로퍼티에서도 리턴 생략
다음 예로 body프로퍼티에서 역시 생략 가능합니다.
struct ContentView: View {
var body: some View {
Text("GOGOn where?") //return 생략 가능
}
}
4. 두 개 이상의 표현식이 있을 경우 return 생략 불가
아래 코드는 return statements(리턴문)이 없다는 오류가 발생하게되는데 그 이유는 컴파일러가 어느 것을 반환해야하는지 알 수 없기 때문입니다.
struct ContentView: View {
var body: some View {
let text = "Hello"
Text(text)
//오류를 피하기 위해 정확히 반환 대상을 명시
// return Text(text)
}
}
교재에서는 오류가 발생한다고 하였지만 body프로퍼티에서는 오류는 발생하지 않고 2개의 프리뷰에서 각각 “Hello”을 보여줍니다.
5. Swift 삼항 연산자
- 삼항 연산자는 표현식에 해당함으로 단일표현식으로 취급됨
- 리턴문 생략 가능
var body: some View {
true ? Text("삼항연산자가 보이니?") : Text("거짓")
}
6. if문의 경우 리턴 생략 불가
if문은 구문(Statement)으로 분류되기 때문에 리턴문을 반드시 명시해야합니다.
var body: someView {
if true {
return Text("리턴 키워드를 명시함")
} else {
return Text("false")
}
}
표현식이란?
값을 반환 혹은 부수 효과가 생기거나 둘 모두가 함께 발생하는 코드를 말합니다.
Swift의 4가지 표현식
- 접두사 표현식
- 이진 표현식
- 기본 표현식
- 접미사 표현식
위 포스팅 내용들은 “스윗한 SwiftUI(이봉원 지음)” 전자책을 보고 스터디 및 실습한 내용들을 기록하였습니다.