함수
함수는 func 키워드를 사용한다. 함수 이름 지정 후 소괄호() 를 사용하여 매개변수를 감싸준다. 그 후 -> 를 통하여 반환 타입을 지정해주고 return을 사용하여 반환한다. 또, 내부 코드가 한줄 표현이고 결과값의 타입이 반환 타입과 일치한다면 return을 생략가능하다.
반환이 필요없는 함수라면 void를 사용하거나 아예 생략해도 된다.
func hello(myname: String,yourname: String) -> String {
return "I'm \(myname). hello \(yourname)"
이 코드에서 myname, yourname은 매개변수에 해당한다. 매개변수 앞에 한칸 띄고 전달인자 레이블을 사용하여 좀 더 명확히 사용할 수 있다.
func hello(from myname: String,to yourname: String) -> String {
return "I'm \(myname). hello \(yourname)"
print(sayhello(from: "KIM", to:"Park"))
from과 to가 전달인자 레이블 역할을 수행 중이다.
함수 내부에서는 전달인자 레이블을 사용할 수 없고, 함수를 호출 할때는 매개변수 이름을 사용할 수 없다.
외부에서 매개변수 입력값을 사용해야하고 전달인자 레이블을 사용하고 싶지않다면 와일드카드(_) 식별자를 사용하면 된다.
매개변수를 작성할 때 기본값을 지정할 수있다. 데이터타입 옆에 입력해주면 된다.
func hello(_ myname: String,_ yourname: String = "KIM") -> String {
이렇게 작성하면 매개변수에 아무 값도 전달되지 않는다면 기본값으로 설정해 함수가 동작한다.
매개변수로 몇 개의 값이 들어올지 모를 때 사용한다.
unc hello(_ myname: String,_ yourname: String...) -> String {
또, 입출력 매개변수를 사용하면 함수 외부에서 내부의 값을 참조하여 원래 값을 변경한다. 참조하고자 하는 매개변수에 &을 사용하면 된다. 그러나 외부에 어떤 영향을 줄지 모르기에 지양하는 패턴이다.
함수안에 함수를 넣는 것이 가능하다.
함수 안의 함수는 몸통 내부에서만 사용이 가능하다. 아예 사용이 불가능한것은 아니긴하다.
####그 외
Never 종료되지 않는 함수
@discardableResult 반환 값을 무시할 수 있는 함수