Swift

ν•¨μˆ˜ ( Functions )

κΈ°κ°€μ •ν›ˆ 2022. 6. 16. 17:33

 

ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” 맨 μ•žμ— 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)

 

인용 및 좜처