λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⌨️ Language/swift

[Swift] ν•¨μˆ˜(Functions)

by hyebin (Helia) 2021. 12. 2.
λ°˜μ‘ν˜•

μ •μ˜μ™€ 호좜

/*
	func ν•¨μˆ˜λͺ… (νŒŒλΌλ―Έν„°: 데이터 νƒ€μž…) -> λ°˜ν™˜νƒ€μž… {
    	return
    }
*/

func person (name: String, age: Int) -> String{
    var s =  "Myname is " + name + " and my age is \(age)"
    return s
}

var s = person(name: "hyebin", age: 24)
print(s) //Myname is hyebin and my age is 24

 

ν•¨μˆ˜ νŒŒλΌλ―Έν„°μ™€ λ°˜ν™˜ κ°’

  • νŒŒλΌλ―Έν„°κ°€ μ—†λŠ” ν•¨μˆ˜
func helloWorld() -> String{
	return "hello, world"
}

print(helloWorld()) //hello, world
  • λ°˜ν™˜ 값이 μ—†λŠ” ν•¨μˆ˜
func helloWorld(){
	print("hello, world")  //hello, world
}

helloWorld()
  • 볡수의 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
func minMax(array: [Int]) -> (min: Int, max: Int) {
    var currentMin = array.min()!
    var currentMax = array.max()!
    return (currentMin, currentMax)
}
var a = [1,2,3,4,5,6,12,14]

var min = 0, max = 0
(min, max) = minMax(array: a)
print(min, max) // 1, 14

print(minMax(array: a))  //(min: 1, max: 14)
  • μ˜΅μ…”λ„ νŠœν”Œ λ°˜ν™˜ν˜•
    • λ°˜ν™˜ 값에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ˜΅μ…”λ„ 체이닝 ν˜Ήμ€ κ°•μ œ unwrapping ν•„μš”
func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.isEmpty {return nil}
    var currentMin = array.min()!
    var currentMax = array.max()!
    return (currentMin, currentMax)
}
var a = [1,2,3,4,5,6,12,14]

if let returnValue = minMax(array: a) {
    print(returnValue.min, returnValue.max)  //1, 14
}

 

ν•¨μˆ˜ 인자 라벨과 νŒŒλΌλ―Έν„° 이름

  • 인자 라벨 μ§€μ •
    • νŒŒλΌλ―Έν„° μ•žμ— 인자 라벨을 μ§€μ •ν•΄ μ‹€μ œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 이름과 호좜 μ‹œ μ‚¬μš©ν•˜λŠ” 이름을 λ‹€λ₯΄κ²Œ ν•˜μ—¬ μ‚¬μš© 
func printName(insertName name: String){
    print( "my Name is " + name + ".")  //my Name is hyebin.
}

printName(insertName: "hyebin")
  • 인자 μƒλž΅
    • νŒŒλΌλ―Έν„° μ•žμ— "_"λ₯Ό λΆ™μ—¬ ν•¨μˆ˜ 호좜 μ‹œ 인자 값을 μƒλž΅
func printName(_ name: String, _ age: Int){
    print( name, age)  //hyebin 14
}

printName("hyebin" , 14)
  • κΈ°λ³Έ νŒŒλΌλ―Έν„° κ°’
    • ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ— κΈ°λ³Έ 값을 μ„€μ • 
    • 기본값이 μ„€μ •λœ νŒŒλΌλ―Έν„°λŠ” ν•¨μˆ˜ 호좜 μ‹œ μƒλž΅ κ°€λŠ₯
func printName(name: String, age: Int = 24){
    print( name, age)  //hyebin 24
}

printName(name: "hyebin")  //hyebin 24
printName(name: "yyy", age: 90)  //yyy 90
  • κ°€λ³€ νŒŒλΌλ―Έν„°
    • νŒŒλΌλ―Έν„° 데이터 νƒ€μž… 뒀에 ... ν‚€μ›Œλ“œ μ‚¬μš©
    • κ°€λ³€ νŒŒλΌλ―Έν„° 뒀에 μžˆλŠ” νŒŒλΌλ―Έν„°λŠ” 인자 μƒλž΅ λΆˆκ°€
    • 기본값을 κ°€μ§ˆ 수 μ—†μœΌλ©°, ν•˜λ‚˜μ˜ νŒŒλΌλ―Έν„°μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
func avg(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}
print(avg(1, 2, 3, 4, 5))  // 3.0
print(avg(3, 8.25, 18.75)) //10.0
  • 인-아웃 νŒŒλΌλ―Έν„°
    • ν•¨μˆ˜μ—μ„œ 직접 νŒŒλΌλ―Έν„° 값에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” νŒŒλΌλ―Έν„°
    • ν•¨μˆ˜μ˜ μΈμžμ— λ³€μˆ˜λ₯Ό 넣을 λ•Œ & ν‚€μ›Œλ“œ μ‚¬μš©
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// someInt is now 107, and anotherInt is now 3

ν•¨μˆ˜ νƒ€μž…

  • λͺ¨λ“  ν•¨μˆ˜λŠ” νŒŒλΌλ―Έν„° ν˜•κ³Ό(parameter types) λ°˜ν™˜ ν˜•(return type)으둜 κ΅¬μ„±λœ νŠΉμ •ν•œ ν•¨μˆ˜ νƒ€μž…μ„ 가짐
  • λ³€μˆ˜ ν˜•μœΌλ‘œμ¨μ˜ ν•¨μˆ˜ν˜•
    • λ³€μˆ˜λ‚˜ μƒμˆ˜μ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  λ•Œ ν•¨μˆ˜ ν˜•μ„ μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„ νƒ€μž… μΆ”λ‘ ν•΄ μžλ™μœΌλ‘œ ν•¨μˆ˜ ν• λ‹Ή κ°€λŠ₯
func addTwoInts(_ a: Int, _ b: Int) -> Int {
  return a + b
}

var mathFunction: (Int, Int) -> Int = addTwoInts
//var mathFunction = addTwoInts

print(mathFunction(2,3)) //5
  • νŒŒλΌλ―Έν„° ν˜•μœΌλ‘œμ¨μ˜ ν•¨μˆ˜ν˜• 
func addTwoInts(_ a: Int, _ b: Int) -> Int {
  return a + b
}

func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
    print("Result: \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5) //"Result: 8"
  • λ°˜ν™˜ ν˜•μœΌλ‘œμ¨μ˜ ν•¨μˆ˜ν˜•
func stepForward(_ input: Int) -> Int {
    return input + 1
}
func stepBackward(_ input: Int) -> Int {
    return input - 1
}
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
    return backward ? stepBackward : stepForward
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)

while currentValue != 0 {
    print("\(currentValue)... ")
    currentValue = moveNearerToZero(currentValue)
}
print("zero!")

 

λ°˜μ‘ν˜•

'⌨️ Language > swift' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Swift] Codility Lesson1 - BinaryGap  (0) 2022.07.23
[Swift] μ—΄κ±°ν˜• (Enumerations)  (0) 2022.02.08
[Swift] μ œμ–΄λ¬Έ(Control Flow)  (0) 2021.11.26
[Swift] 데이터 νƒ€μž…(2)  (0) 2021.11.25
[Swift] 데이터 νƒ€μž…(1)  (0) 2021.11.25