본문 바로가기
iOS/Swift

Swift) return에 대한 의문

by Jiseong 2022. 2. 12.

의문점

여지껏 함수내부에 return이 어느 위치에 있든 쓰기만 하면 함수를 탈출하는 흐름제어구문(Control Transfer Statements)인줄 알았다.

 

흐름제어구문(Control Transfer Statements)은 맞다.

 

근데 공식문서를 확인해보니 이렇게 써있더라

When a return statement isn’t followed by an expression, it can be used only to return from a function or method that doesn’t return a value (that is, when the return type of the function or method is Void or ()).

그냥.. 반환할 것이 없는 함수엔 return만을 쓰는 것이다. 이건 알고있는데..

내가 겪은 것을 뭐라 설명해야될지 모르겠는데..

 

예를 들어보겠다.

guard let input = Int(userinput) else {
        print(Message.wrongInput)
        printInput()
        return 
}

위 코드같은 경우엔 return전에 printInput()을 타서 return은 영향이 없을 것이다.

하지만

guard let input = Int(userinput) else {
        print(Message.wrongInput)
        return 
        printInput()
}

난 이 코드는 printInput()이 return 보다 아래에 있으니 printInput()을 타지 않고, return을 타서 그대로 함수를 탈출할줄 알았다.

해결

근데 테스트를 막 해보니..

Expression following 'return' is treated as an argument of the 'return'

라는 경고문이 뜬걸 봤다.

 

return뒤에 오는 Expression, 즉 위 코드에선 printInput()이 retrun의 인자가 된다..........

guard let input = Int(userinput) else {
        print(Message.wrongInput)
        return printInput()
}

이거랑 같은 것이 되는거다.

 

2번째 코드처럼 테스트를 해봤을 때 아니 분명 return을 만나서 printInput()을 못타고 함수가 종료될텐데 왜 멀쩡히 정상동작하는거지? 싶었는데..

 

의문이 해결됐다.

'iOS > Swift' 카테고리의 다른 글

Swift) KVO(Key-Value-Observing)  (0) 2022.02.12
일반화, 추상화, 캡슐화, 은닉화, 암호화  (0) 2022.02.12
Swift) Switch vs If else  (0) 2022.02.12
Swift) Error Handling  (0) 2022.02.12
함수 전달인자명과 파라미터명  (0) 2022.02.12

댓글