Swift에서 함수를 선언할 때 매개변수를 다양한 방식으로 선언해 줄 수 있다.
그 중 개발하면서 자주 사용하는 몇개를 정리해 보았다.
함수 매개변수에 기본 값을 지정할 수 있다. 함수 호출 시에 매개변수에 값을 넣지 않으면 자동으로 기본값이 들어간다.
func greeting(languageName: String = "World"){
print("Hello, \(languageName)!")
}
greeting(languageName: "Swift") // "Hello, Swift!"
greeting() // "Hello, World!" 👈 매개변수를 넣지 않아, 기본값이 들어감
전달인자 레이블을 사용하면 매개변수의 역할을 명확하게 표현해 줄 수 있으므로, 코드의 가독성이 높아진다.
func 함수명 (전달인자레이블 매개변수이름: AnyType){
...
}
func sendMessage(myName: String, name: String) -> String {
return "안녕하세요 \(name)님! ... \(myName)올림."
}
sendMessage(myName: "주희", name<: "민지")
👉 이름을 왜 넣는지, 어떻게 쓰일 것인지를 알 수 없음..
func sendMessage(from myName: String, to name: String) -> String {
return "안녕하세요 \(name)님! ... \(myName)올림."
}
sendMessage(from: "주희", to: "민지") // "안녕하세요 민지님! .. 주희올림."
👉 누가 누구에게 보내는건지 분명하고, 매개변수의 역할이 명확해짐.
let list: [Int] = [1,2,3]
list.remove(2) //2번째 값 "3"을 지우는건지, "2"를 지우는건지? -- BAD
list.remove(at: 2) //2번째 "3"을 지우는구나 -- GOOD
전달인자 레이블을 사용하고 싶지 않다면, 와일드 카드 식별자를 사용
func greeting(_ name: String) -> String {
return "Hello \(name)"
}
// 매개변수 이름을 적지않고 값만 넣어 전달할 수 있다.
greeting("juh2") // "Hello juh2"
매개변수에 값이 몇개가 들어올지 모를 때, 가변 매개변수를 사용할 수 있다.
가변 매개변수는 0개 이상의 값을 받아올 수 있으며 가변 매개변수 값으로 들어온 인자 값들은 배열처럼 사용된다.
주의 - 함수마다 가변 매개변수를 한개만 가질 수 있다.
func sendMessage(me: String, friend: String...) -> String {
return "Hello, \(friends!) I'm \(me)"
}
sendMessage(me: "juh2", friends: "minsu", "minji", "sole")
// "Hello, ["minsu", "minji", "sole"]! I', juh2"