ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ν•¨μˆ˜ ( Functions )
    Swift 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)

     

    인용 및 좜처

Designed by Tistory.