[Swift] ν•¨μˆ˜

KiwiΒ·2024λ…„ 2μ›” 27일

Swift

λͺ©λ‘ 보기
6/21
post-thumbnail

πŸ“ν•¨μˆ˜ func

ν•¨μˆ˜λŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ λͺ¨μŒμ΄λ‹€. ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λŠ” ν•¨μˆ˜κ°€ μž…λ ₯으둜 λ°›λŠ” ν•˜λ‚˜ μ΄μƒμ˜ νƒ€μž…μœΌλ‘œ 된 값을 λ§ν•œλ‹€.

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜) -> λ°˜ν™˜ κ°’ {
    μ‹€ν–‰ν•  μ½”λ“œ
    return λ°˜ν™˜κ°’
}

πŸ“ νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„°μ— 2λ₯Ό λ”ν•œ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

func plusTwo(x: Int) -> Int {
    return x + 2
}

plusTwo(x: 3)

ν•¨μˆ˜μ˜ 이해λ₯Ό 돕기 μœ„ν•΄ 인수 라벨을 μ‚¬μš©ν•  수 μžˆλ‹€. νŒŒλΌλ―Έν„° 이름은 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©ν•œλ‹€λ©΄, 인수 라벨은 ν•¨μˆ˜κ°€ 호좜될 λ•Œ μ‚¬μš©λœλ‹€. μΈμˆ˜λΌλ²¨μ€ νŒŒλΌλ―Έν„° 이름 μ•žμ— 곡백으둜 κ΅¬λΆ„ν•œλ‹€.

func plusTwo(at x: Int) -> Int {
    return x + 2
}
plusTwo(at: 3)

μΈμˆ˜λΌλ²¨μ„ μ›μΉ˜ μ•ŠλŠ”λ‹€λ©΄ 인수 라벨 λŒ€μ‹ μ— 언더바_ λ₯Ό λ°˜λ“œμ‹œ μž‘μ„±ν•΄μ€˜μ•Ό ν•œλ‹€.

func plusTwo(_ x: Int) -> Int {
    return x + 2
}
plusTwo(3)

νŒŒλΌλ―Έν„°μ— 기본값을 ν• λ‹Ήν•  수 μžˆλ‹€. 기본값이 μ •μ˜λ˜μ–΄ μžˆλ‹€λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ νŒŒλΌλ―Έν„°λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

func plusTwo(x: Int, y: Int = 2) -> Int {
    return x + 2
}
plusTwo(x: 3)
plusTwo(x: 3, y: 4) //λ°˜ν™˜κ°’μ€ 5이닀.

plusTwo(x: 3, y: 4)μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ νŒŒλΌλ―Έν„°μ˜ 값이 μ§€μ •λ˜μ–΄ μžˆμ–΄λ„ 기본값이 μ μš©λœλ‹€.(κΈ°λ³Έκ°’ > νŒŒλΌλ―Έν„° λΆ€μ—¬ κ°’)
νŒŒλΌλ―Έν„°μ— μ—¬λŸ¬κ°œμ˜ μž…λ ₯값이 μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ°€λ³€ νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•œλ‹€. κ°€λ³€ νŒŒλΌλ―Έν„°λŠ” μ—¬λŸ¬κ°œμ˜ νŠΉμ • νƒ€μž…μ˜ 값을 ν—ˆμš©ν•œλ‹€. νŒŒλΌλ―Έν„° νƒ€μž…μ˜ 이름 뒀에 ...λ₯Ό μΆ”κ°€ν•˜μ—¬ μž‘μ„±ν•œλ‹€.

func sum(_ x: Int...) -> Int {
	var total: Int = 0
    for i in x{
    	total += i
    }
    return total
}
sum(1,2,3,4)

ν•¨μˆ˜ νŒŒλΌλ―Έν„°λŠ” 기본적으둜 μƒμˆ˜(let)이닀. 즉 ν•¨μˆ˜μ˜ λ³Έλ¬Έμ—μ„œ νŒŒλΌλ―Έν„°μ˜ 값을 λ³€κ²½ν•  수 μ—†λ‹€. ν•¨μˆ˜ νŒŒλΌλ―Έν„°μ˜ 값을 λ³€κ²½ν•˜κ³  ν•¨μˆ˜ 호좜이 μ’…λ£Œλœ 후에도 λ³€κ²½λœ 값을 μœ μ§€ν•˜κ³  μ‹Άλ‹€λ©΄ in-out νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. in-out νŒŒλΌλ―Έν„°λŠ” νŒŒλΌλ―Έν„°μ˜ νƒ€μž… λ°”λ‘œ 전에 inout ν‚€μ›Œλ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λœλ‹€. in-out νŒŒλΌλ―Έν„°μ˜ μΈμˆ˜λ‘œλŠ” λ³€μˆ˜λ§Œ 전달할 수 μžˆλ‹€. ν•¨μˆ˜μ— μˆ˜μ •κ°€λŠ₯함을 μ•Œλ¦¬κΈ° μœ„ν•΄ in-out νŒŒλΌλ―Έν„°μ— 인수둜 전달할 λ•Œ λ³€μˆ˜μ˜ 이름 μ•žμ— &λ₯Ό λΆ™μ—¬μ€€λ‹€. (c언어와 μœ μ‚¬ν•œκ²ƒκ°™λ‹€.....)

func swap(_ a: inout Int, _b: inout Int) {
	let temp = a
    a = b
    b = temp
}
var num1: Int = 3
var num2: Int = 4
swap(&num1, &num2)

πŸ“ λ°˜ν™˜κ°’

λ°˜ν™˜κ°’μ€ μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. λ°˜ν™˜κ°’μ„ μ •μ˜ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ μ—¬μ „νžˆ Void νƒ€μž…μ„ λ°˜ν™˜ν•˜μ§€λ§Œ μ΄λŠ” λ¬΄μ‹œν•΄λ„ λœλ‹€.

func plusTwo(_ x: Int) -> Int {
    print(x+2)
}

λ°˜λŒ€λ‘œ μ—¬λŸ¬κ°œμ˜ λ°˜ν™˜κ°’μ„ μ§€μ •ν•˜μ—¬λ„ λœλ‹€. μ΄λ•ŒλŠ” νŠœν”Œ νƒ€μž…μ„ μ‚¬μš©ν•œλ‹€.

func findMinMax(array: [Int]) -> (min: Int, max: Int) {
    ...
    return (currentMin, currentMax)
}

 let results = minMax(array: [8, -6, 2, 109, 3, 71])
 print(results.min)
 print(results.max)

λ°˜ν™˜λ˜λŠ” νŠœν”Œμ— λŒ€ν•΄ 값이 μ—†λŠ” κ²½μš°λ„ λ°œμƒν•  수 μžˆλ‹€. 이럴 경우 μ˜΅μ…”λ„ νŠœν”Œ λ°˜ν™˜ νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ 전체 νŠœν”Œμ΄ nil 일 수 μžˆλ‹€λŠ” 사싀을 λ°˜μ˜ν•΄μ•Ό ν•œλ‹€. (Int, Int)? 와 같이 νŠœν”Œ νƒ€μž…μ˜ λ‹«λŠ” μ†Œκ΄„ν˜Έμ— λ¬ΌμŒν‘œλ₯Ό λΆ™μ—¬ μž‘μ„±ν•œλ‹€. μ΄λ•Œ (Int, Int?)와 ν—·κ°ˆλ¦¬λ©΄ μ•ˆλœλ‹€!!!! μ™„μ „νžˆ λ‹€λ₯Έ μ˜λ―Έμ΄λ‹€.
μ˜΅μ…”λ„ 바인딩을 톡해 λ°˜ν™˜κ°’μ΄ nil인지 확인해야 ν•œλ‹€.

func findMinMax(array: [Int]) -> (min: Int, max: Int)? {
    ...
    return (currentMin, currentMax)
}

 if let results = minMax(array: [8, -6, 2, 109, 3, 71]){
 print(results.min)
 print(results.max)
 }

πŸ“λ°μ΄ν„° νƒ€μž…μœΌλ‘œμ„œμ˜ ν•¨μˆ˜ νƒ€μž…

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜ μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œ λ§€κ°œλ³€μˆ˜μ˜ 역할을 μ’€ 더 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©.

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

ν•¨μˆ˜ νƒ€μž… μ‚¬μš© μ˜ˆμ‹œ.

func plusTwo(_ x: Int) -> Int {
    return x + 2
}
var mathFunc: (Int) -> Int = plusTwo
mathFunc(3)

πŸ“νŒŒλΌλ―Έν„° νƒ€μž…μœΌλ‘œμ„œμ˜ ν•¨μˆ˜ νƒ€μž…

ν•¨μˆ˜ νƒ€μž…μ„ λ‹€λ₯Έ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

func printMathResult(_ mathFunction: (Int) -> Int, _ a: Int) {
    print("Result: \(mathFunction(a, b))")
}
printMathResult(plusTwo, 3)

πŸ“λ°˜ν™˜ νƒ€μž…μœΌλ‘œμ„œμ˜ ν•¨μˆ˜ νƒ€μž…

λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μœΌλ‘œ ν•¨μˆ˜ νƒ€μž…μ„ μ‚¬μš©

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
}

ν•¨μˆ˜μ™€ λ©”μ„œλ“œλŠ” μœ μ‚¬ν•˜μ§€λ§Œ λ‹€λ₯΄κ²Œ μ·¨κΈ‰ν•œλ‹€!!!

  • ν•¨μˆ˜ : λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰, νŠΉμ • νƒ€μž…μ— μ†ν•΄μžˆμ§€ μ•ŠμŒ
  • λ©”μ„œλ“œ : νŠΉμ • νƒ€μž…(객체)에 속해 νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰
profile
🐣 iOS Developer

0개의 λŒ“κΈ€