iOS/Basic Challenge

[6] ν•¨μˆ˜ / νŒŒλΌλ―Έν„° / ν΄λ‘œμ €

πŸ“’ ν•¨μˆ˜μ˜ μ„ μ–Έ

πŸ“Œ ν•¨μˆ˜ μ„ μ–Έμ˜ κΈ°λ³Έ ν˜•νƒœ

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜1이름: λ§€κ°œλ³€μˆ˜1νƒ€μž…, λ§€κ°œλ³€μˆ˜2이름: λ§€κ°œλ³€μˆ˜2νƒ€μž… ...) -> λ°˜ν™˜νƒ€μž… {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return λ°˜ν™˜κ°’
}

// 예)
// sumμ΄λΌλŠ” 이름을 κ°€μ§€κ³  
// a와 bλΌλŠ” Int νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€λ©° 
// Int νƒ€μž…μ˜ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
func sum(a: Int, b: Int) -> Int {
    return a + b
}

πŸ“Œ λ°˜ν™˜ 값이 μ—†λŠ” ν•¨μˆ˜

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜1이름: λ§€κ°œλ³€μˆ˜1νƒ€μž…, λ§€κ°œλ³€μˆ˜2이름: λ§€κ°œλ³€μˆ˜2νƒ€μž… ...) -> Void {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return
}

// 예)
func printMyName(name: String) -> Void {
    print(name)
}

// λ°˜ν™˜ 값이 μ—†λŠ” 경우, λ°˜ν™˜ νƒ€μž…(Void)을 μƒλž΅ν•΄ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€
func printYourName(name: String) {
    print(name)
}

πŸ“Œ λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” ν•¨μˆ˜

func ν•¨μˆ˜μ΄λ¦„() -> λ°˜ν™˜νƒ€μž… {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return λ°˜ν™˜κ°’
}

// 예)
func maximumIntegerValue() -> Int {
    return Int.max
}

πŸ“Œ λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ΄ μ—†λŠ” ν•¨μˆ˜

func ν•¨μˆ˜μ΄λ¦„() -> Void {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return
}

// ν•¨μˆ˜ κ΅¬ν˜„μ΄ 짧은 경우
// 가독성을 ν•΄μΉ˜μ§€ μ•ŠλŠ” λ²”μœ„μ—μ„œ
// μ€„λ°”κΏˆμ„ ν•˜μ§€ μ•Šκ³  ν•œ 쀄에 ν‘œν˜„ν•΄λ„ λ¬΄κ΄€ν•©λ‹ˆλ‹€
func hello() -> Void { print("hello") }


// λ°˜ν™˜ 값이 μ—†λŠ” 경우, λ°˜ν™˜ νƒ€μž…(Void)을 μƒλž΅ν•΄ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€
func ν•¨μˆ˜μ΄λ¦„() {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return
}

func bye() { print("bye") }

 

πŸ“’ ν•¨μˆ˜μ˜ 호좜

sum(a: 3, b: 5) // 8

printMyName(name: "yagom") // yagom

printYourName(name: "hana") // hana

maximumIntegerValue() // Int의 μ΅œλŒ“κ°’

hello() // hello

bye() // bye

 

πŸ“’ λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’

πŸ“ λ§€κ°œλ³€μˆ˜μ— κΈ°λ³Έμ μœΌλ‘œ μ „달될 κ°’을 λ―Έλ¦¬ μ§€μ •ν•  μˆ˜ μžˆμŒ

πŸ“ 기본값을 κ°–λŠ” λ§€κ°œλ³€μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ λͺ©λ‘ μ€‘에 λ’€μͺ½μ— μœ„μΉ˜ν•˜λŠ” κ²ƒμ΄ μ’‹μŒ

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜1이름: λ§€κ°œλ³€μˆ˜1νƒ€μž…, λ§€κ°œλ³€μˆ˜2이름: λ§€κ°œλ³€μˆ˜2νƒ€μž… = λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’ ...) -> λ°˜ν™˜νƒ€μž… {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return λ°˜ν™˜κ°’
}

func greeting(friend: String, me: String = "yagom") {
    print("Hello \(friend)! I'm \(me)")
}

// λ§€κ°œλ³€μˆ˜ 기본값을 κ°€μ§€λŠ” λ§€κ°œλ³€μˆ˜λŠ” ν˜ΈμΆœμ‹œ μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€
greeting(friend: "hana") // Hello hana! I'm yagom
greeting(friend: "john", me: "eric") // Hello john! I'm eric

 

πŸ“’ μ „λ‹¬μΈμž λ ˆμ΄λΈ”

πŸ“ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜ μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œ λ§€κ°œλ³€μˆ˜μ˜ μ—­ν• μ„ μ’€ λ” λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©

func ν•¨μˆ˜μ΄λ¦„(μ „λ‹¬μΈμž λ ˆμ΄λΈ” λ§€κ°œλ³€μˆ˜1이름: λ§€κ°œλ³€μˆ˜1νƒ€μž…, μ „λ‹¬μΈμž λ ˆμ΄λΈ” λ§€κ°œλ³€μˆ˜2이름: λ§€κ°œλ³€μˆ˜2νƒ€μž… ...) -> λ°˜ν™˜νƒ€μž… {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return
}

// ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ „λ‹¬μΈμžλ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” λ§€κ°œλ³€μˆ˜ 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€
func greeting(to friend: String, from me: String) {
    print("Hello \(friend)! I'm \(me)")
}

// ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” μ „λ‹¬μΈμž λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€
greeting(to: "hana", from: "yagom") // Hello hana! I'm yagom

 

 

πŸ“’ κ°€λ³€ λ§€κ°œλ³€μˆ˜

πŸ“ 전달 받을 κ°’μ˜ 개수λ₯Ό μ•ŒκΈ° μ–΄λ €μšΈ λ•Œ μ‚¬μš©

πŸ“ κ°€λ³€ λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜λ‹Ή ν•˜λ‚˜λ§Œ κ°€μ§ˆ μˆ˜ μžˆμŒ

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜1이름: λ§€κ°œλ³€μˆ˜1νƒ€μž…, μ „λ‹¬μΈμž λ ˆμ΄λΈ” λ§€κ°œλ³€μˆ˜2이름: λ§€κ°œλ³€μˆ˜2νƒ€μž…...) -> λ°˜ν™˜νƒ€μž… {
    /* ν•¨μˆ˜ κ΅¬ν˜„λΆ€ */
    return
}

func sayHelloToFriends(me: String, friends: String...) -> String {
    return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "yagom", friends: "hana", "eric", "wing"))
// Hello ["hana", "eric", "wing"]! I'm yagom!

print(sayHelloToFriends(me: "yagom"))
// Hello []! I'm yagom!

 

πŸ“’ 데이터 νƒ€μž…μœΌλ‘œμ„œμ˜ ν•¨μˆ˜

πŸ“ SwiftλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ ν¬ν•¨ν•˜λŠ” 닀쀑 νŒ¨λŸ¬λ‹€μž„ μ–Έμ–΄μ΄λ―€λ‘œ Swift의 ν•¨μˆ˜λŠ” 일급객체.

πŸ“ κ·Έλž˜μ„œ ν•¨μˆ˜λ₯Ό λ³€μˆ˜, μƒμˆ˜ 등에 할당이 κ°€λŠ₯ν•˜κ³  λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 전달도 κ°€λŠ₯

 

πŸ“Œ ν•¨μˆ˜μ˜ νƒ€μž…ν‘œν˜„

(λ§€κ°œλ³€μˆ˜1νƒ€μž…, λ§€κ°œλ³€μˆ˜2νƒ€μž… ...) -> λ°˜ν™˜νƒ€μž…

 

πŸ“Œ ν•¨μˆ˜νƒ€μž… μ‚¬μš©

var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("eric", "yagom") // Hello eric! I'm yagom

someFunction = greeting(friend:me:)
someFunction("eric", "yagom") // Hello eric! I'm yagom


// νƒ€μž…μ΄ λ‹€λ₯Έ ν•¨μˆ˜λŠ” ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€ - 컴파일 였λ₯˜ λ°œμƒ
//someFunction = sayHelloToFriends(me: friends:)


func runAnother(function: (String, String) -> Void) {
    function("jenny", "mike")
}

// Hello jenny! I'm mike
runAnother(function: greeting(friend:me:))

// Hello jenny! I'm mike
runAnother(function: someFunction)

 

πŸ“ μŠ€μœ„ν”„νŠΈμ˜ μ „λ°˜μ μΈ λ¬Έλ²•μ—μ„œ 띄어쓰기 주의!