Swift 정리 - Functions

김세영·2021년 12월 19일
0

Swift Doc 정리

목록 보기
5/17
post-thumbnail
func greet(person: String) -> String {
    return "Hello, " + person + "!"
}

print(greet(person: "Harry")) 
// Hello, Harry!
let greetBrian: String = greet(person: "Brian")
// greetBrian : Hello, Brian!

Return Value

  • Functions without return values
    -> ** 을 붙여주지 않으면 반환값이 없는 함수가 되는데,
    엄밀히 말하면 -> Void 형식. (Void = ())
  • Functions with multiple return values
    함수의 반환값으로 튜플과 옵셔널 튜플을 사용할 수 있다.
func minMax(array: [Int]) -> (min: Int, max: Int)? {
    guard !array.isEmpty else { return nil }
    
    let min = array.min()!
    let max = array.max()!
    
    return (min, max)
}

let minMax1 = minMax(array: [1, 2, 3])
print(minMax1)
// Optional((min: 1, max: 3))

let minMax2 = minMax(array: [])
print(minMax2)
// nil

Argument, Parameter

  • Function Argument Label, Omitting Argument Label, Default Parameter Value
    파라미터 앞에 인자 라벨을 지정해
    호출 시 사용하는 이름과 함수 내부에서 사용하는 이름을 구분할 수 있다.
    또한 호출 시 _ 키워드로 인자값 생략 가능
func greet(_ person: String, from hometown: String = "Busan") -> String {
    return person + " is from " + hometown + "."
}

print(greet("Kim", from: "Seoul"))
// Kim is from Seoul.
print(greet("Lee"))
// Lee is from Busan.
  • Variadic Parameters
    인자 값으로 특정 타입의 집합을 사용 가능
func sum(_ numbers: Int...) -> Int {
    var sum = 0
    for number in numbers { sum += number }
    return sum
}

print(sum(1, 2, 3, 4, 5))
// 15
  • In-Out Parameters
    스위프트는 인자값을 함수 내부에서 변경할 수 없는데, 이를 가능하게 하는 것이 inout 키워드
    C에서 swap(&a, &b)의 역할과 비슷하다.
    Default Parameter Value를 가질 수 없고, Variadic Parameter을 사용할 수 없다.
func swap(_ a: inout Int, _ b: inout Int) {
    let temp = a
    a = b
    b = temp
}

var int1 = 10
var int2 = 20
swap(&int1, &int2)
// int1 : 20, int2 : 10

Function Types

함수의 인자 값과 반환 값, 변수의 타입이 같으면 변수에 함수를 할당할 수 있다.

func addTwoInts(_ a: Int, _ b: Int) -> Int { return a + b }
// addTwoInts: (Int, Int) -> Int

var addFunction: (Int, Int) -> Int = addTwoInts
// or 
// var addFunction = addTwoInts (타입 추론)
print(addFunction(2, 3))
// 5
  • Function Types as Parameter Types
    함수의 파라미터에 Function Type을 사용 가능
func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
    print(mathFunction(a, b))
}
printMathResult(addTwoInts, 3, 5)
// 8
  • Function Types as Return Values
    함수의 반환형으로 Function Type을 사용 가능
func add(_ a: Int, _ b: Int) -> Int { return a + b }
func sub(_ a: Int, _ b: Int) -> Int { return a - b }

func chooseMathFunction(isAdd: Bool) -> (Int, Int) -> Int {
    return isAdd ? add : sub
}

let mathFunction = chooseMathFunction(isAdd: true)
print(mathFunction(2, 3))

Nested Functions

함수 내부에 또 다른 함수를 선언하고, 사용할 수 있다.
중첩 함수는 함수 밖에서는 감춰줘 있고, 함수 내부에서는 접근 가능
중첩 함수는 함수 안에 있는 변수 / 상수들을 사용 가능

func chooseMathFunction(isAdd: Bool) -> (Int, Int) -> Int {
    func add(_ a: Int, _ b: Int) -> Int { return a + b }
    func sub(_ a: Int, _ b: Int) -> Int { return a - b }

    return isAdd ? add : sub
}

let mathFunction = chooseMathFunction(isAdd: true)
print(mathFunction(2, 3))
// 5
profile
초보 iOS 개발자입니다ㅏ

0개의 댓글