Result of call to ... is unused | Swift
언제 부터인지 기억나지는 않지만 스위프트(Swift)에서 값을 반환(return)하는 함수나 메소드 등을 그냥 호출하면, 즉 리턴값을 받지 않고 그냥 호출하는 코드에서는 아래와 같은 경고가 뜹니다.
하지만 Xcode 상에서의 모든 경고가 그렇다시피, 위 스크린샷 처럼 노란 딱지가 붙어 있으면 상당히 걸리적 거립니다. 무슨 압류 딱지 마냥 눈길도 가고 놔두면 무슨 일이 생길 것 같기도 하고...
상황에 따라 반환값을 처리하지 않아도 될 때가 있습니다. 오히려 반환값을 받는 변수를 메모리에 할당하는게 아까운 수준이라고 생각해 보지요.
그럴때는 아래와 같이 공허의 변수[...]에 반환값을 받는 방법이 있습니다.
하지만 이런 식의 코드는 개인적으로 선호하지 않습니다. let 이라는 키워드는 어쨌든 뭔가를 선언하는 용도인데 볼 수 없는 쓰레기통을 만드는 셈이니깐요. 아니 만들었음에도 주무를 수 없는 변수 아닌... 아니 이게 도데체 뭐란 말인가요 이런 설명 할 수 없는 기운에 휩싸입니다. 다크포스의 유혹이 느껴집니다...
물론 이 '공허의 변수' 라는 이름은 제가 멋대로 지은 것입니다. 적당하지 않나요? ;-)
위의 addition() 메소드를 살짝 고쳐봅시다.
하여간 이 한 줄로 이제 귀찮음과 설명할 수 없는 불길한 다크포스의 유혹에서 해방 될 수 있습니다.
위 스크린샷에서 볼 수 있듯이 리턴값을 공허의 변수에 받지 않아도 아무런 경고문구가 보이지 않습니다.
정리해 보자면, Swift 에서는 무시 가능한 리턴값을 리턴하는 함수나 메소드는 그 설계 차원에서 이를 명시(discardableResult)해야 하며 그렇지 않으면 Xcode 가 당신을 괴롭히는 기능이 탑재되어 있습니다.
진작에 알았다면 제 공허의 변수가 쓰인 코드가 많이 줄었을 텐데 너무 아쉽습니다. 그래도 이제라도 알아서 다행일지도 모르겠네요.
물론 이런 경고 기능은 실수하지 말라고 Xcode 와 Swift Compiler 가 배려해 주는 것이니 굳이 탓하지는 맙시다. :D
[관련글] 스위프트(Swift) 가이드
Result of call to (Some Function or Method) is unused메시지만 봐서는 별거 아닌 것일지도 모릅니다. 당연히 내용도 간단하고 해결법도 단순해 보입니다.
하지만 Xcode 상에서의 모든 경고가 그렇다시피, 위 스크린샷 처럼 노란 딱지가 붙어 있으면 상당히 걸리적 거립니다. 무슨 압류 딱지 마냥 눈길도 가고 놔두면 무슨 일이 생길 것 같기도 하고...
상황에 따라 반환값을 처리하지 않아도 될 때가 있습니다. 오히려 반환값을 받는 변수를 메모리에 할당하는게 아까운 수준이라고 생각해 보지요.
그럴때는 아래와 같이 공허의 변수[...]에 반환값을 받는 방법이 있습니다.
let _ = addition(a: 10, b: 20)아마도 익숙한 방식일 것입니다. 대체로 값을 쓸 필요는 없지만 이터레이션 시켜야 하는 등 여러 상황에서 이 공허의 변수에 값을 대입하는 식으로 쓸 데 없는 변수를 받지 않는 방법이 있습니다.
하지만 이런 식의 코드는 개인적으로 선호하지 않습니다. let 이라는 키워드는 어쨌든 뭔가를 선언하는 용도인데 볼 수 없는 쓰레기통을 만드는 셈이니깐요. 아니 만들었음에도 주무를 수 없는 변수 아닌... 아니 이게 도데체 뭐란 말인가요 이런 설명 할 수 없는 기운에 휩싸입니다. 다크포스의 유혹이 느껴집니다...
물론 이 '공허의 변수' 라는 이름은 제가 멋대로 지은 것입니다. 적당하지 않나요? ;-)
@discardableResult
아마도 위의 '리턴 값을 처리하지 않는 당신을 괴롭히는 기능' 이 추가되었을 때 함께 추가되었을 법한 키워드를 알게 되었습니다. 바로 @discardableResult 입니다. 번역해 보면 결과(result)를 무시가능한(discardable) 이라는 의미인데 바로 이해가 될 것 같은 표현입니다.위의 addition() 메소드를 살짝 고쳐봅시다.
@discardableResult func addition(a: Int, b: Int) -> Int { return a + b }딱 한 줄 더 함수 선언 위에 추가한 모양세 입니다. 마치 파이썬(Python)의 데코레이터와 비슷한 문법 같습니다.
하여간 이 한 줄로 이제 귀찮음과 설명할 수 없는 불길한 다크포스의 유혹에서 해방 될 수 있습니다.
위 스크린샷에서 볼 수 있듯이 리턴값을 공허의 변수에 받지 않아도 아무런 경고문구가 보이지 않습니다.
정리해 보자면, Swift 에서는 무시 가능한 리턴값을 리턴하는 함수나 메소드는 그 설계 차원에서 이를 명시(discardableResult)해야 하며 그렇지 않으면 Xcode 가 당신을 괴롭히는 기능이 탑재되어 있습니다.
진작에 알았다면 제 공허의 변수가 쓰인 코드가 많이 줄었을 텐데 너무 아쉽습니다. 그래도 이제라도 알아서 다행일지도 모르겠네요.
물론 이런 경고 기능은 실수하지 말라고 Xcode 와 Swift Compiler 가 배려해 주는 것이니 굳이 탓하지는 맙시다. :D
[관련글] 스위프트(Swift) 가이드
댓글