// 파라미터가 있는 함수
func printHello(with name: String) {
print("Hello, \(name)")
}
let f2: (String) -> () = printHello(with:)
let f3 = printHello(with: )
// 함수를 호출할때는 반드시 아규먼트 레이블을 호출해야 한다고 공부했지만
// 상수에 저장된 함수를 호출할때는 아규먼트 레이블을 호출하지 않는다.
f3("World")
파라미터 있는 함수
// 파라미터가 있는 함수
func printHello(with name: String) {
print("Hello, \(name)")
}
let f2: (String) -> () = printHello(with:)
let f3 = printHello(with: )
// 함수를 호출할때는 반드시 아규먼트 레이블을 호출해야 한다고 공부했지만
// 상수에 저장된 함수를 호출할때는 아규먼트 레이블을 호출하지 않는다.
f3("World")
func add(a: Int, b: Int) -> Int {
return a + b
}
var f4: (Int, Int) -> Int = add(a:b:)
f4(1, 2)
var f5 = add(a:b:)
f5(1,2)
func swapNumbers(_ a: inout Int, _ b: inout Int) {
}
let f6 = swapNumbers(_:_:)
f6
//예제
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
func subtract(_ a: Int, _ b: Int) -> Int {
return a - b
}
func multiply(_ a: Int, _ b: Int) -> Int {
return a * b
}
func divide(_ a: Int, _ b: Int) -> Int {
return a / b
}
// 첫번째 리턴 화살표 selectFunction의 리턴 타입
// 두번째 리턴 화살표 (형식에 포함된 리턴 화살표)
//func selectFunction(from op: String) -> (Int, Int) -> Int {
//
//}
// 이렇게되면 (Int, Int)는 return에 들어가는 파라미터?
// 그래서 실행되는 결과가 Int타입으로 return된다는 건가?
typealias ArithmeticFunction = (Int, Int) -> Int
func selectFunction(from op: String) -> ArithmeticFunction?{
switch op {
case "+":
return add(_:_:)
case "*":
return multiply(_:_:)
case "_":
return subtract(_:_:)
case "/":
return divide(_:_:)
default:
return nil
}
}
let af = selectFunction(from: "+")
// 함수가 Optional 형식에 저장되어 있기 때문에
// Optional chaining이 필요
// 함수자체가 Optional 형식에 저장되어 있기 때문에 괄호 앞에 추가해야 한다.
af?(1, 2)
// 이런식으로 호출도 가능
// 왜냐? 상수에 Optional 형식의 함수가 저장된게 아니고
// Optional chaining으로 부르는거기 때문에 괄호 뒤에
selectFunction(from: "*")?(12, 34)