// 선언부
func someFunction(_ wildCard: Type, argumentlabel parameter: Type, ..) {
...
logic(parameter)
...
}
// 호출부
someFunction(wildCardValue, argumentlabel: argumentValue)
func sayHelloFn(name: String) {
print("\(name), 안녕~!")
}
func sayHelloFn(name: String) -> String {
return "\(name), 안녕~!"
}
let fn: (String) -> Void = sayHelloFn(name:)
let fn2: (String) -> String = sayHelloFn(name:)
fn("한결")
fn2("한결")
someButton.addTarget(self, action: #selector(fn), for: .touchUpInside)
// someButton이 터치될 경우에만
// selector 함수에 인자로 넘겨준 '함수 타입'의 함수를 실행시킨다.
// 함수 자체를 호출하지 않고, 함수 자체를 넘겨준다.
@objc func fn() {}
enum CalcType {
case plus, minus
}
func plus(_ first: Int, _ second: Int) -> Int {
return first + second
}
func minus(_ first: Int, _ second: Int) -> Int {
return first - second
}
func basicCalc(calcType: CalcType) -> (Int, Int) -> Int {
return calcType == .plus ? plus : minus
}
let result = basicCalc(calcType: .plus)
let result2 = basicCalc(calcType: .minus)
result(5, 3) // 8
result2(5, 3) // 2
enum BrokerType {
case incr, decr
}
func incrOrDecr(_ num: Int, _ type: BrokerType) -> Int {
return type == .incr ? num + 1 : num - 1
}
func broker(_ baseNum: Int, brokerType: BrokerType, cb: (Int, BrokerType) -> Int)
-> Int {
return cb(baseNum, brokerType)
}
let result3 = broker(1, brokerType: .incr, cb: incrOrDecr(_:_:) // 2
let result4 = broker(1, brokerType: .decr, cb: { v, t in
return t == .decr ? v - 1 : v + 1
}) // 0
["a", "b", "c", "d"].map {
$0 + "-"
} // ["a-", "b-", "c-", "d-"]
["a", "b", "c", "d"].filter {
$0 == "a"
} // ["a"]