iOS/iOS Swift 문법

iOS swift 함수

Developer-Michelle 2022. 7. 17. 12:53

1. 함수와 메서드

함수와 메서드는 기본적으로 같다.

다만 상황이나 위치에 따라 다른 용어로 부른다.

 

메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수

함수: 모듈 전체에서 전역적으로 사용할 수 있는 함수

 

2. 함수의 정의와 호출

함수에서는 () 소괄호를 생략할 수 없다. (조건문이나 반복문과 달리)

스위프트의 함수: 재정의(오버라이드), 중복정의(오버로드) 모두 지원. -> 매개변수의 개수가 달라도 같은 이름의 함수를 만들 수 있다.

 

1) 기본적인 함수의 정의와 호출

자유도가 굉장히 높은 문법 중 하나.

함수의 이름, 매개변수(파라미터), 반환타입 등을 사용하여 함수 정의.

 

func 함수이름(매개변수...) -> 반환타입 {

 실행구문

 return 반환 값

}

 

func hello(name: String) -> String {

 return "Hello \(name)!

}

 

let helloJenny: String = hello(name: "Jenny")

print(helloJenny) //Hello Jenny!

 

참고 : 함수 내부의 코드가 단 한 줄의 표현이고, 그 표현의 결과값의 타입이 함수의 반환 타입과 일치한다면, return 생략 가능.

 

매개변수: 함수를 정의할 때 외부로부터 받아들이는 전달 값의 이름. (name)

전달인자: 함수를 실제로 호출할 때 전달하는 값. (Jenny)

 

2) 매개변수

*매개변수가 없는 함수와 매개변수가 여러개인 함수

함수에 매개변수가 필요 없다면 매개변수의 위치를 공란으로 비워둠.

func helloWorld() -> String {

 return "Hello, world!"

}

print(hellowWorld()) // Hello, world!

 

매개변수가 여러 개 필요한 함수를 정의할 때는 쉼표로 매개변수를 구분.

주의할점은 함수를 호출할 때, 매개변수 이름을 붙여주고 콜론(:)을 적어준 후 전달인자를 보내준다.

이렇게 호출시에 매개변수에 붙이는 이름을 '매개변수 이름'이라고 한다.

 

func sayHello(myName: String, yourName: String) -> String {

 return "Hello \(yourName)! I'm \(myName)"

}

 

print(sayHello(myName: "yagom", yourName: "Jenny")) // Hello Jenny, I'm yagom

 

*매개변수이름과 전달인자 레이블

전달인자 레이블을 사용하려면 함수 정의에서 매개변수 이름 앞에 한 칸을 띄운 후 전달인자 레이블을 지정.

 

func 함수이름(전달인자레이블 매개변수 이름: 매개변수 타입, 전달인자 레이블 매개변수 이름: 매개변수 타입 ...) -> 반환 타입 {

 실행 구문

 return 반환 값

}

 

func sayHello(from myName:String, to name:String) -> String {

 return "Hello \(name)! I'm (myName)"

}

print(sayHello(from:"yagom", to:"Jenny") // Hello Jenny! I'm yagom

 

*매개변수 기본값

스위프트의 함수에서는 매개변수마다 기본값 지정 가능.

즉, 매개변수가 전달되지 않으면 기본값 사용.

p161 예제 참조

 

*가변 매개변수와 입출력 매개변수 -> 어렵다...

매개변수로 몇 개의 값이 들어올지 모를  때, 가변 매개변수를 사용할 수 있다.

가변 매개변수는 0개이상(0개포함)의 값을 받아올 수 있으며, 가변 매개변수로 들어온 인자값은 배열처럼 사용 가능.

함수마다 가변 매개변수는 하나만 가질 수 있다.

 

var numbers: [Int] = [1,2,3]

 

func nonReferenceParameter(_arr: [Int]) {

 var coppiedArr: [Int] = arr

 coppiedArr[1] = 1

}

 

func referenceParameter(_arr: inout[Int]) {

 arr[1] = 1

}

 

nonReferenceParameter(numbers)

print(numbers[1]) //2

 

referenceParameter(&numbers)

print(numbers[1]) //1

 

3) 반환이 없는 함수

void로 표기하거나 아예 반환 타입 표현을 생략

 

4) 데이터 타입으로의 함수

(매개변수 타입의 나열) -> 반환타입

 

3. 중첩함수

스위프트는 데이터 타입의 중첩이 자유롭다.

 

4.종료되지 않는 함수

비반환함수(메서드)는 반환타입을 Never라고 명시해주면 된다.

func crashAndBurn() -> Never {

 fatalError("Something very, very bad happened")

}

crashAndBurn() //프로세스 종료 후 오류 보고

 

 

5. 반환 값을 무시할 수 있는 함수

프로그래머가 의도적으로 함수의 반환 값을 사용하지 않을 경우, 컴파일러가 함수의 결과 값을 사용하지 않았다는 경고를 보낼 때가 있다. 이런 경우 함수의 반환 값을 무시해도 된다는 @discardableResult 선언 속성을 사용하면 된다.

 

 

 

 

 

 

 

 

출처: 야곰 swift 책

'iOS > iOS Swift 문법' 카테고리의 다른 글

if - let, guard - let  (0) 2022.08.30
프로퍼티와 메서드  (0) 2022.07.31
iOS swift 흐름제어  (0) 2022.07.16
iOS swift 연산자  (0) 2022.07.14
iOS swift 열거형 enum , switch  (0) 2022.07.14