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