Definition:
// Syntax:
// fun <name>([<labelName>] <paramName>: <type>) [-> <type>] { ... }
// Example 1
func printHello() {
print("Hello")
}
// Example 2
func addTwoNumbers(numOne: Int, numTwo: Int) -> Int {
numOne + numTwo
}
// addTwoNumbers(numOne: 1, numTwo: 2)
// Example 3
func addTwoNumbersWithDifferentNames(a numOne: Int, b numTwo: Int) -> Int {
numOne + numTwo
}
// addTwoNumbersWithDifferentNames(a: 1, b: 2)
// NOTE: Labels cannot be used inside function body
// Example 4
func addTwoNumbersWithDefaultParam(_ numOne: Int, b numTwo: Int) -> Int {
numOne + numTwo
}
// addTwoNumbersWithDefaultParam(1, b: 2)
// NOTE: "return" keyword is not required for single line body
- Nested functions have closures (defined by
{}
)
- Functions are first class
{ (<name>) in <retValue> }
is like a lambda of sorts for func x(<name>: <type>) -> <retType> { return <retValue> }