Swift 설계할 때 argument label 를 넣은 이유

우리 팀 회의 하다가 argument label 관련된 얘기 나와서 복습 했던 코드 공유합니다.

argument label 를 Swift 설계할 때 넣은 이유 공감하시나요…? 저희 팀은 더 헥갈린다 라는 결론을 내렸었습니다…ㅎㅎㅎㅎㅎ

===========================================================
The use of argument labels can allow a function to be called in an expressive, sentence-like manner,
while still providing a function body that’s readable and clear in intent.

func printHello(name: String, _ welcomeMessage: String) {
print(“(name)님, (welcomeMessage)”)
}

func printHello2(_ name: String, _ welcomeMessage: String) {
print(“(name)님, (welcomeMessage)”)
}

func printHello3(n name: String, w welcomeMessage: String) {
print(“(name)님, (welcomeMessage)”)
}

printHello(name:“장혁”,“안녕하세요”)
printHello2(“장혁”,“안녕하세요”)
printHello3(n:“장혁”, w:“안녕하세요”)
//printHello3(name:“장혁”, welcomeMessage:“안녕하세요”) //error

좋아요 1

argument label이 있는 경우와 없는 경우를 비교해보죠~

다음은 테이블 뷰에서 특정 셀(섹션 0, 로우 3)을 선택하는 함수를 호출하는 코드에요.

tableView.selectRow(at: IndexPath(row: 3, section: 0), animated: true, scrollPosition: .middle)

이 코드에서 argument label을 없앤 코드는 다음과 같습니다. 비교를 위해서 임의로 삭제했고, 그냥 사용하면 에러가 발생합니다.

tableView.selectRow(IndexPath(3, 0), true, .middle)

비교해보면 어떤가요?

개인적인 취향이 있겠습니다만

제 개인 의견으로, 잘 만든 API 구조에서 파라미터 레이블이 전혀 거슬리지 않고 코드에 도움이 되는 거 같습니다.

대신 가로로 긴 모니터가 필요하겠죠???

argument label을 포함해서 좀 더 나은 API 설계에 관해서 API Design Guideline - Swift.org - API Design Guidelines 를 참고해보세요.

좋아요 1

WWDC의 Modern Swift API Design 비디오 링크를 첨부합니다.

안녕하세요! 이재훈 강사님

강사님은 parameter name 을 설명 주셨고 저는 얘기는 argument lable을 말씀 드렸습니다…
혹시 제가 잘 못 이해했나 매우 조심스러운데요…

func someFunction(argumentLabel parameterName: Int) {
// In the function body, parameterName refers to the argument value
// for that parameter.
}

제가 예제로 들었던 것 중에 (1) funtion에서 “name” parameter 만 사용하는 경우는 완벽하게 이해합니다.

(1) funtion 을 호출 할 때 “name” pameter를 생략하면 오류 발생하구요 그래서 printHello(name:“장혁”,“안녕하세요”)

func printHello(name: String, _ welcomeMessage: String) {
print(“(name)님, (welcomeMessage)”)
}

(3) 번 function 처럼 굳이 n, w, argument label 까지 써야 할까 …? 질문이었고

그리고 예로 들어주신 selectRow는 parameter name을 생략 못 하지 않나요…? (동공 지진… 제가 잘 못 이해한 걸까요? )

tableView.selectRow(IndexPath(3, 0), true, .middle)

좋아요 1

아 제가 argument label과 parameter name을 혼용해서 사용했네요.

제가 예제로 작성한 두 코드는 모두 함수를 호출하는 코드입니다. 이 중 두 번째 코드에서 함수를 호출하는 코드에 argument label이 있는 경우와 없는 경우를 비교하기 위해서 임의로 argument label을 생략했습니다. 이 부분은 혹시나 이후에 오해가 더 생길까봐 내용을 수정하겠습니다.

알고 계시듯이 Swift에서 argument label을 생략한 채로 호출하면 에러가 발생하겠죠.

좋아요 1