Functions

Youn·2021년 5월 12일
0

iOS-Swift

목록 보기
2/11
post-thumbnail

🔍Functions

Argument Label

(label name: Type)

func sayHello(name: String) {}   //name 은 파라미터이자 레이블. 호출식에는 argument label, 함수선언에서는 parameter name
sayHello(name: "Swift") 

func sayHello(to name: String){} // function name = sayHelloto
sayHello(to: "Swift")

func sayHello(_ name: String) {}
sayHello("Swift")

/*반환값이 있는 함수*/
func addNum(a: Int, b: Int) -> Int {
  return a + b
}
  • 함수를 호출할 때 사용함 (parameter name 은 함수호출할 때 사용할 수 없다, 함수 body 에서 전달된 값 사용할 때)
  • 생략가능 → func sayHello(name: String) 도 가능함 (parameter 이름은 생략 불가)
  • Argument Label : 전치사, Param: 명사 → 함수가 문장처럼 읽히도록 이름 짓는게 좋음
  • swift 의 생략 : 아예 생략 || wild card pattern (_)

Variadic Parameters (가변 파라미터)

(name: Type...)

  • 배열 형태로 전달됨
func sayHello(_ name: String...) {
}

print("Hello")

print("Hello", "Swfit") // param 2개같지만 실제로는 하나임  ->  가변 파라미터(하나 이상의 argument 전달 가능)
  • 전달은 , 로 구분해서 하면 됨
  • 기본값 지정 불가

In-Out Parameters

(name: inout Type)
funcName(argLabel: &expr)

  • Call by Reference - argument로 전달된 변수의 값을 직접 변경 가능
  • 함수의 parameter는 함수의 body 에서 사용할 수 있는 임시 상수(let)
  • 원래는 call by value 로 함수 인자가 전달됨 → 복사본 전달 → 함수내에서 값 변경해도 원래 값 보존
  • copy in copy out memory mode 사용
  • 상수나 리터럴은 전달할 수는 없다 → 메모리 공간 가지고 있는 것만 전달 가능
  • 기본값 선언 불가, 가변파라미터에서 사용 불가
var num1, num2
func swapNumber(_a: inout Int, with b: inout Int) {
	let tmp = a
	a = b
	b = tmp
}
swapNumber(&num1, with: &num2) //변수를 함수 바디 내부로 복사(copy in), 함수종료되면 함수에서 변경된 값이 전달한 변수(외부)에 복사(copy out)

Function Notation

fuctionName(label:)
functionName(label:label:)
functionName

  • 코드 내에서 함수 지칭

Function Types

Swift의 함수 : First-class Citizen

First-class Citizen
1. 변수나 상수에 저장할 수 있다. → 자료형 필요
2. 파라미터로 전달할 수 있다. → 자료형 필요
3. 함수에서 리턴할 수 있다. → 자료형 필요
4. 함수가 함수를 반환할 수 있ㄷ.

func sayHello() {}
let f1 = sayHello    // let f1: () -> () 로 타입표시해주기도 가능
f1()   // 호출할 때 argument label 은 사용하지 않음!

Nested Functions

  • inner 함수는 outer함수 내부에서만 호출 가능
profile
youn

0개의 댓글