iOS

[iOS/Swift] 4. 함수, 클로저

AHHYE 2021. 2. 8. 10:38

 

 함수 

* func 키워드, ->(반환 타입 지정)

* 함수 호출 시 파라미터 이름 함께 써줘야 함

func MyName(name: String) -> String {
    var string = "제 이름은 \(name)입니다.\n"
    return string
}

MyName(name: "ahhye")
func MyName(userName name: String) -> String {
    var string = "제 이름은 \(name)입니다.\n"
    return string
}

MyName(userName: "ahhye")

* 기본값이 지정된 파라미터는 호출 시 생략 가능

func MyName(_ name: String) -> String {
    var string = "제 이름은 \(name)입니다.\n"
    return string
}

MyName("ahhye")

* Variadic Parameters

func MyName(name: String...) -> String {
    var string = "제 이름은 \(name)입니다.\n"
    return string
}

MyName("ahhye", "eunseo", "jisu", "yuhyeon")

* 함수 중첩

func Hello(name: String) {
    func MyName(name: String) -> String {
        var string = "제 이름은 \(name)입니다.\n"
        return string
    }
    
    print(MyName(name: name))
}

* 함수 반환

func Hello(name: String) -> (String) -> String { //내부 함수의 파라미터가 여러 개일 경우 (String, String, ..)
    func MyName(name: String) -> String {
        var string = "제 이름은 \(name)입니다.\n"
        return string
    }
    
    return MyName
}

 

 

 

 클로저 (Closure) 

: 이름이 없는 함수 (중괄호 {} 로 감싸지고, 파라미터 받을 수 있으며 값 반환도 가능)

* in 으로 코드 분리

func Hello(message: String) -> (String) -> String {
    return { name in
        return name + message
    }
}
func Hello(message: String) -> (String) -> String {
    return { 
        return $0 + message
    }
}
func Hello(message: String) -> (String) -> String {
    return { $0 + message }
}
let name: (String) -> String = { "제 이름은 " + $0 + "입니다." }
let name: ((String) -> String)? //옵셔널

 

let numbers = [3, 2, 4, 6, 1, 9, 8]

let sorted = numbers.sort { $0 < $1 }

let odds = numbers.filter { $0 % 2 != 0 }

let mult2 = numbers.map { $0 * 2 }

numbers.reduce(0) { $0 + $1 } //33
numbers.reduce(0, +) //33