ν¨μ ( Functions )
ν¨μλ₯Ό μ μΈνκΈ° μν΄μλ 맨 μμ func ν€μλλ₯Ό λΆμ΄κ³ ν¨μλͺ ( νλΌλ―Έν° μ΄λ¦ : λ°μ΄ν° νμ ) -> λ°ν νμ μΌλ‘ μ μν©λλ€.
func greet(person: String) -> String {
let greeting = " Hello" + person + "!"
return greeting
}
func - ν¨μλΌλ κ²μ μ€μννΈ μ»΄νμΌλ¬μκ² μλ €μ£Όλ ν€μλ
ν¨μλͺ - ν¨μμ ν λΉλλ μ΄λ¦
νλΌλ―Έν° μ΄λ¦ - ν¨μ μ½λ λ΄μμ μ°Έμ‘°λλ 맀κ°λ³μμ μ΄λ¦
λ°μ΄ν° νμ - ν¨μμ μ λ¬λλ 맀κ°λ³μμ νμ
λ°ν νμ - ν¨μκ° λ°ννλ κ²°κ³Όμ λν λ°μ΄ν° νμ
μ μν ν¨μμ μΈμ κ°μ λ£μ΄ νΈμΆν΄λ³΄κ² μ΅λλ€.
print(greet (person: "Tim Cook") )
// "Hello Tim Cook! "
νλΌλ―Έν°κ° μλ ν¨μ( Functions Without Parameters)
func HelloWorld() -> String {
return " Hello World ! "
}
print( HelloWorld() )
//"Hello World !"
λ°ν κ°μ΄ μλ ν¨μ ( Functions Without Return Values )
func greet(person: String){
print("Hello \(person) !")
}
greet(person: "James")
//"Hello James !"
β» μμ μ½λλ ν¨μλ₯Ό λ§λ€ λμ ν¨μ μμμ λ°ν κ°μ μ μΈνμ§ μμμ§λ§ λ°ν κ°μ΄ μμ΅λλ€. λ°ν κ°μ΄ μ μλμ§ μμ ν¨μλ VoidλΌλ νΉλ³ν νμ λ°νν©λλ€.
볡μμ κ°μ λ°ννλ ν¨μ ( Fuctions with Multiple Return Values )
ννμ μ΄μ©νμ¬ ν¨μμ λ°ν κ°μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
본격μ μΈ μ€νμ μμμ νμ¬ μμ κ°, ν° κ°μ λ°°μ΄ μ²« λ²μ§Έ μμλ‘ λ£μ΄μ£Όλ©° forλ¬Έμμλ λ°°μ΄μ λ λ²μ§Έ μμλΆν° λ°°μ΄ κ°μλ§νΌ λ°λ³΅λ¬Έμ΄ λμκ°λ©° if , else if λ¬Έμ κ±°μ³ λ°°μ΄ μμ μλ κ°μ₯ μμ κ°κ³Ό ν° κ°μ νλ³νμ¬ currentMin, currentMaxμ λ£μ΄μ£Όκ² λ©λλ€.
let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
print("min is \(bounds.min) and max is \(bounds.max)")
// "min is -6 and max is 109"
μ΅μ λ νν λ°νν ( Optional Tuple Return Types )
Swiftλ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄κΈ° μν΄ μ€λ₯λ₯Ό λ°μνλ κ²μ λ°©μ§νκ³ μ μ€λ₯ λμ nilκ°μ λ°νν¨μΌλ‘μ¨ κ°λ°μμκ² λ¬Έμ κ° μλ€λ κ²μ μ립λλ€. nilκ°μ -> κ°μ΄ μμμ λ»ν©λλ€.
μ€λ₯ λ°μμ κ°λ₯μ±μ΄ μ‘°κΈμ΄λΌλ μμΌλ©΄ μ΅μ λλ‘ μ μν΄μΌ ν©λλ€.
μ΅μ λμ λ³λλ‘ μ‘΄μ¬νλ μλ£νμ΄ μλ κΈ°λ³Έ μλ£νμ λμνλ μ΅μ λ νμ μ λλ€.
func minMax(array: [Int]) -> (min: Int, max: Int)? {
if array.isEmpty { return nil }
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
μ€μ λ°ν κ°μ μ κ·ΌνκΈ° μν΄μλ if letκ³Ό κ°μ μ΅μ λ 체μ΄λμ μ¬μ©νκ±°λ κ°μ μΈλνμ ν΄μΌ ν©λλ€.
μ΅μ λ 체μ΄λ
- μ΅μ λ 체μ΄λμ nilμΌ μλ μλ νλ‘νΌν°λ, λ©μλ μ§μλ₯Ό νλ κ³Όμ μ λ§ν©λλ€. κ°μ κ°μ§κ³ μλ€λ©΄ κ·Έ κ°μ λ°ννκ³ λ§μ½ κ°μ΄ nilμ΄λ©΄ nilμ λ°νν©λλ€.
κ°μ μΈλν
- κ°μ₯ μ£Όμν΄μΌ νλ λ°©λ²μ λλ€ force unwrappingμ μ΅μ λ νμ μ λ³μλ₯Ό μ¬μ©ν λ λ³μ μ΄λ¦ λ€μ λλν(!)λ₯Ό λΆμ¬μ£Όλ©΄ λ©λλ€.
//μ΅μ
λ 체μ μ¬μ© μ
if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
print("min is \(bounds.min) and max is \(bounds.max)")
}
// "min is -6 and max is 109"
μΈμ λΌλ²¨ μ§μ ( Specifying Arugument Labels )
func ν¨μλͺ
( μ λ¬μΈμ λ μ΄λΈ1 맀κ°λ³μ1μ΄λ¦: 맀κ°λ³μ1νμ
) -> λ°ννμ
{
return λ°νκ°
}
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
//"Hello Bill! Glad you could visit from Cupertino."
맀κ°λ³μ μ΄λ¦κ³Ό λλΆμ΄ μ λ¬ μΈμ λ μ΄λΈμ μ§μ ν΄μ€ μ μμ΅λλ€. μ λ¬ μΈμ λ μ΄λΈμ λ³λλ‘ μ§μ νλ©΄ ν¨μ μΈλΆμμ 맀κ°λ³μμ μν μ μ’ λ λͺ ννκ² ν μ μμ΅λλ€.
μΈμ μλ΅ ( Omitting Argument Labels )
func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
// ν¨μ μμμ firstParameterName, secondParameterName
// μΈμλ‘ μ
λ ₯λ°μ 첫λ²μ§Έ, λλ²μ§Έ κ°μ μ°Έμ‘°ν©λλ€.
}
someFunction(1, secondParameterName: 2)
μΈμ© λ° μΆμ²