함수 (Functions)
정의와 호출 (Defining and Calling Functions)
정의 (Define)
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
// 문자열 직접 반환 가능
func greet(person: String) -> String {
return "Hello, " + person + "!"
}
함수를 선언할 땐 맨 앞에 func 키워드를 붙이고 선언함수 이름을 정한 뒤, (person: String) 파라미터와 타입, 그리고 -> String 반환 타입을 정의한다.
호출 (Call)
print(greet(person: "Anna"))
// "Hello, Anna!"
print(greet(person: "Brian"))
// "Hello, Brian!"
정의된 함수에 인자값을 넣어 호출한다.
파라미터가 여러개거나 존재하지 않거나, 반환값이 여러개거나, 존재하지 않는 함수도 정의할 수 있다.
파라미터가 없는 함수
func sayHelloWorld() -> String {
return "hello, world"
}
print(sayHelloWorld())
// "hello, world"
파라미터가 여러개인 함수
func greet(person: String, alreadyGreeted: Bool) -> String {
if alreadyGreeted { // 이미 인사했으면
return greetAgain(person: person) // 반환값에서 외부 함수 호출 가능
} else { // 인사 안했으면
return greet(person: person)
}
}
print(greet(person: "Tim", alreadyGreeted: true))
// "Hello again, Tim!"
반환값이 없는 함수
func greet(person: String) {
print("Hello, \(person)!")
}
greet(person: "Dave")
// "Hello, Dave!"
여러 값을 반환하는 함수
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
튜플을 반환할 수 있다.
옵셔널 튜플 반환형
func minMax(array: [Int]) -> (min: Int, max: Int)? {
if array.isEmpty { return nil }
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
반환값에 ? 을 붙여 옵셔널 값을 반환시킬 수 있다.
실제 반환값에 접근하기위해선 if let과 같은 옵셔널 체이닝을 사용하거나, 강제 언래핑으로 접근할 수 있다.
// 옵셔널 체이닝을 사용하여 실제값 접근
if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
print("min is \(bounds.min) and max is \(bounds.max)")
}
// "min is -6 and max is 109"
내부 인자, 외부 인자
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
// "Hello Bill! Glad you could visit from Cupertino."
//from - 외부, hometown - 내부
파라미터 앞에 인자 라벨을 지정해 실제 함수 내부에서 해당 인자를 식별하기 위한 이름과 함수 호출시 사용하는 이름을 다르게 해서 사용할 수 있다.
인자 생략
func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
}
someFunction(1, secondParameterName: 2)
파라미터 앞에 _를 붙여 함수 호출시 인자값을 생략할 수 있다.
파라미터 default값 지정
함수의 파라미터 값에 기본 값을 설정할 수 있다. 기본 값이 설정 되어 있는 파라미터는 함수 호출시 생략할 수 있으며, 기본 값을 사용하지 않는 파라미터를 앞에 위치 시켜야 함수를 의미있게 사용하기 쉽다.
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12
함수 호출시 두번째 인자를 생략하면 함수안에서 parameterWithDefault값은 12가 기본 값으로 사용된다.
인-아웃 파라미터 (In-Out Parameters)
인자 값을 직접 변경하는 파라미터이다.
선언을 위해 파라미터 앞에 inout 이라는 키워드를 사용한다.
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// "someInt is now 107, and anotherInt is now 3"
함수의 인자에 변수를 넣을때 & 키워드를 넣는다.
C를 안다면 inout파라미터는 포인터를 넣는곳이라 생각하면 편하다.
'iOS > Swift' 카테고리의 다른 글
Swift) Optional Binding (0) | 2022.02.10 |
---|---|
[Swift] Closure (0) | 2021.09.24 |
M1 error running pod install (0) | 2021.09.20 |
text property (0) | 2021.09.10 |
IOS Application Lifecycle (2) | 2021.09.09 |
댓글