Function Types - Functions
Function Typesλ λ³μλ μμμ ν¨μλ₯Ό assign νλ κ²½μ°, νμ μ λͺ μν λ νμν©λλ€.
Swiftμμ ν¨μλ first-class citizen μ΄λ―λ‘, λ³μλ μμμ ν¨μλ₯Ό assign ν μ μμ΅λλ€.
μ΄μ κΈμμ Function Notationλ§μ μ΄μ©νμ¬ νμ μΆλ‘ μ ν΅ν΄ μ μ₯νμμ§λ§,
ν¨μλ μλ£νμ κ°μ§κ³ μμΌλ―λ‘ λͺ μμ μΌλ‘ λ³μ νΉμ μμμ νμ λ νκΈ°ν μ μμ΅λλ€.
λν ν΄λ‘μ λ₯Ό νλΌλ―Έν°λ‘ λ°λ μ½λλ₯Ό μ΄ν΄νκΈ° μν΄ Function Typesμ μ΄ν΄νλ κ²μ νμν©λλ€.
Syntax
/* Function Types */
(type) -> type
() -> () // () -> void λ‘λ νκΈ°ν μ μμ΅λλ€. Functionμμ μ°λ void λ 리ν΄νμ΄ μλ€λ κ²μ μλ―Έν©λλ€.
Example Code 1
func sayHello() {
print("Hello, Swift")
}
let f1 = sayHello // Type Inference
func printHello(with name: String){
print("Hello, \(name)")
}
let f2: (String) -> () = printHello(with:) // Type Notation with Function Types
λ¨, f2λ₯Ό ν¨μλ‘ νΈμΆν κ²½μ°, Function Types λ§ λ°μμ€κΈ° λλ¬Έμ, Argument Lable μμ΄ νΈμΆνμ¬μΌ ν©λλ€.
Argument Labelμ λ£μ μ μ»΄νμΌ μλ¬
Example Code 2
func selectFunction(from op: String) -> (Int, Int) -> Int {
...
}
// νμ΄νκ° λ§μ ν·κ°λ¦΄ μ μμΌλ,
// μ΄ λλ 첫λ²μ§Έ νμ΄νλ§ selectFuntion(from:)μ λ¦¬ν΄ κ°μ λνλ΄κ³ ,
// λλ¨Έμ§λ νμ
νμ
μ λν νμ΄νμμ μκΈ°νλ©΄ λ©λλ€.
// μ¦, selectFunction(from:)μ ν΄λ‘μ λ₯Ό 리ν΄νλ ν¨μ μ
λλ€.
/* κ°λ
μ±μ ν₯μμν€λ λ°©λ² */
typealias Arithmeticfuntion = (Int, Int) -> Int
λ.
μ΄μ κΈ: Function Notation - Functions