Deep_Dev
article thumbnail

 

ν΄λ‘œμ €

ν΄λ‘œμ €λŠ” μ‚¬μš©μžμ˜ μ½”λ“œ μ•ˆμ—μ„œ μ „λ‹¬λ˜μ–΄ μ‚¬μš©ν•  수 μžˆλŠ” λ‘œμ§μ„ 가징 μ€‘κ΄„ν˜Έ{} κ΅¬λΆ„λœ μ½”λ“œμ˜ λΈ”λŸ­μ΄λ‹€.

μ‰½κ²Œ λ§ν•˜λ©΄ '이름이 μ—†λŠ” ν•¨μˆ˜'이닀. λ”°λΌμ„œ ν•¨μˆ˜λŠ” 이름이 μžˆλŠ” ν΄λ‘œμ €λΌκ³  ν•  수 μžˆλ‹€.

ν΄λ‘œμ €λŠ” λ³€μˆ˜λ‚˜ μƒμˆ˜κ°€ μ„ μ–Έλœ μœ„μΉ˜μ—μ„œ μ°Έμ‘°λ₯Ό νšλ“ν•˜κ³  μ €μž₯ν•  수 μžˆλ‹€.

 

πŸ’‘ ν΄λ‘œμ €μ˜ 3가지 ν˜•νƒœ

  • 이름이 μžˆμœΌλ©΄μ„œ μ–΄λ–€ 값도 νšλ“ν•˜μ§€ μ•Šμ€ μ „μ—­ν•¨μˆ˜μ˜ ν˜•νƒœ
  • 이름이 μžˆμœΌλ©΄μ„œ λ‹€λ₯Έ ν•¨μˆ˜ λ‚΄λΆ€μ˜ 값을 νšλ“ν•  수 μžˆλŠ” μ€‘μ²©λœ ν•¨μˆ˜μ˜ ν˜•νƒœ
  • 이름이 μ—†κ³  μ£Όλ³€ λ¬Έλ§₯에 따라 값을 νšλ“ν•  수 μžˆλŠ” μΆ•μ•½ λ¬Έλ²•μœΌλ‘œ μž‘μ„±ν•œ ν˜•νƒœ

πŸ’‘ ν΄λ‘œμ €μ˜ λ‹€μ–‘ν•œ ν‘œν˜„

  • ν΄λ‘œμ €λŠ” λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜ κ°’μ˜ νƒ€μž…μ„ λ¬Έλ§₯을 톡해 μœ μΆ”ν•  수 있기 λ•Œλ¬Έμ— λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜ κ°’μ˜ νƒ€μž…μ„ μƒλž΅ν•  수 μžˆλ‹€.
  • ν΄λ‘œμ €μ— 단 ν•œμ€„μ˜ ν‘œν˜„λ§Œ λ“€μ–΄μžˆλ‹€λ©΄ μ•”μ‹œμ μœΌλ‘œ 이λ₯Ό λ°˜ν™˜ κ°’μœΌλ‘œ μ·¨κΈ‰ν•œλ‹€.
  • μΆ•μ•½λœ μ „λ‹¬μΈμž 이름을 μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν›„ν–‰ ν΄λ‘œμ € 문법을 μ‚¬μš©ν•  수 μžˆλ‹€.

 

κΈ°λ³Έ ν΄λ‘œμ €

ν΄λ‘œμ €μ˜ ν‘œν˜„

{ ( λ§€κ°œλ³€μˆ˜ 이름 : λ§€κ°œλ³€μˆ˜ νƒ€μž… ) -> λ°˜ν™˜νƒ€μž… in
           ν΄λ‘œμ € ν‘œν˜„μ‹ μ½”λ“œ
}

ν•¨μˆ˜μ™€ κ°€μž₯ 큰 차이점은 이름이 μžˆλƒ 없냐이닀. μΈμžλ“€μ„ 넣을 수 있고 λ°˜ν™˜νƒ€μž…κΉŒμ§€ μ„€μ •ν•  수 μžˆλ‹€. 

그리고 ν•¨μˆ˜μ˜ λ‚΄μš©μ— ν•΄λ‹Ήν•˜λŠ” μˆ˜ν–‰λ‚΄μš©μ„ in λ‹€μŒμ— μ λŠ”λ‹€. 

 

일반적인 ν•¨μˆ˜

func add(x: Int,y: Int) -> Int {
	return (x+y)
}

print(add(x:10, y:20))

 

ν΄λ‘œμ €

let add1 = {(x:Int, y:Int) -> Int in
	return (x+y)
}
print(add1(10,20))

 

 

ν›„ν–‰ ν΄λ‘œμ €

ν›„ν–‰ ν΄λ‘œμ €λž€ ν΄λ‘œμ €κ°€ ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰ argument라면 λ§ˆμ§€λ§‰ λ§€κ°œλ³€μˆ˜ 이름을 μƒλž΅ν•œ ν›„ ν•¨μˆ˜ μ†Œκ΄„ν˜Έ 외뢀에 ν΄λ‘œμ €λ₯Ό κ΅¬ν˜„ν•  수 있게 ν•΄μ£ΌλŠ” 것이닀. ν΄λ‘œμ €κ°€ 쑰금 κΈΈμ–΄μ§€κ±°λ‚˜ 가독성이 쑰금 떨어진닀 μ‹ΆμœΌλ©΄ ν›„ν–‰ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.

// ν›„ν–‰ ν΄λ‘œμ € λ―Έμ‚¬μš©
let onAction = UIAlertAction(title: "On", style: UIAlertAction.Style.default, handler: {
	// μ‹€ν–‰ μ½”λ“œ
})

// ν›„ν–‰ ν΄λ‘œμ € μ‚¬μš©
let onAction = UIAlertAction(title: "On", style: UIAlertAction.Style.default) {
	// μ‹€ν–‰ μ½”λ“œ
})

 

 

ν΄λ‘œμ €μ˜ ν‘œν˜„ κ°„μ†Œν™”

λ¬Έλ§₯을 μ΄μš©ν•œ νƒ€μž… μœ μΆ”

λ©”μ„œλ“œμ˜ μ „λ‹¬μΈμžλ‘œ μ „λ‹¬ν•˜λŠ” ν΄λ‘œμ €λŠ” λ©”μ„œλ“œμ—μ„œ μš”κ΅¬ν•˜λŠ” ν˜•νƒœλ‘œ 전달해야 ν•œλ‹€. 즉, λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄λ‚˜ 개수, λ°˜ν™˜ νƒ€μž… 등이 κ°™μ•„μ•Ό μ „λ‹¬μΈμžλ‘œμ„œ 전달할 수 μžˆλ‹€.

 

ν΄λ‘œμ €μ˜ νƒ€μž… μœ μΆ”

// ν΄λ‘œμ €μ˜ λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό λ°˜ν™˜ νƒ€μž…μ„ μƒλž΅ν•˜μ—¬ ν‘œν˜„ ν•  수 μžˆλ‹€.
let reversed: [String] = names.sorted { (first, second) in
	return first > second
}

 

단좕 인자 이름

μŠ€μœ„ν”„νŠΈλŠ” 쑰금 더 κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ„λ‘ 단좕 인자 이름을 μ œκ³΅ν•œλ‹€.

λ‹¨μΆ•μΈμž 이름은 첫번째 μ „λ‹¬μΈμžλΆ€ν„° $0, $1, $2 μˆœμ„œλ‘œ $와 숫자의 μ‘°ν•©μœΌλ‘œ ν‘œν˜„ν•œλ‹€.

λ‹¨μΆ•μΈμž ν‘œν˜„μ„ μ‚¬μš©ν•˜λ©΄ in ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  ν•„μš”λ„ μ—†λ‹€.

 

λ‹¨μΆ•μΈμž 이름 μ‚¬μš©

// 단좕 인자 이름을 μ‚¬μš©ν•œ ν‘œν˜„
let reserved: [String] = names.sorted {
	return $0 > $1
}

 

μ•”μ‹œμ  λ°˜ν™˜ ν‘œν˜„

ν΄λ‘œμ €μ—μ„œλŠ” return ν‚€μ›Œλ“œλ„ μƒλž΅ν•  수 μžˆλ‹€.

λ§Œμ•½ ν΄λ‘œμ €κ°€ λ°˜ν™˜ 값을 κ°–λŠ” ν΄λ‘œμ €μ΄κ³  ν΄λ‘œμ € λ‚΄λΆ€μ˜ 싀행문이 단 ν•œμ€„μ΄λΌλ©΄, μ•”μ‹œμ μœΌλ‘œ κ·Έ 싀행문을 λ°˜ν™˜ κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

μ•”μ‹œμ  λ°˜ν™˜ ν‘œν˜„μ˜ μ‚¬μš©

let reserve: [String] = names.sorted { $0 > $1 }

 

μ—°μ‚°μž ν•¨μˆ˜

비ꡐ μ—°μ‚°μžλŠ” 두 개의 ν”Όμ—°μ‚°μžλ₯Ό 톡해 Bool νƒ€μž…μ˜ λ°˜ν™˜μ„ μ€€λ‹€.

ν΄λ‘œμ €λŠ” λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…κ³Ό λ°˜ν™˜ νƒ€μž…μ΄ μ—°μ‚°μžλ₯Ό κ΅¬ν˜„ν•œ ν•¨μˆ˜μ˜ λͺ¨μ–‘κ³Ό λ™μΌν•˜λ‹€λ©΄ μ—°μ‚°μžλ§Œ ν‘œκΈ°ν•˜λ”λΌλ„ μ•Œμ•„μ„œ μ—°μ‚°ν•˜κ³  λ°˜ν™˜ν•œλ‹€.

 

> μ—°μ‚°μž μ •μ˜

public func ><T : Comparable>(lhs: T, rhs: T) -> Bool

> μžμ²΄κ°€ ν•¨μˆ˜μ˜ 이름이닀. 

 

ν΄λ‘œμ €λ‘œμ„œμ˜ μ—°μ‚°μž ν•¨μˆ˜ μ‚¬μš©

let reversed: [String] = names.sorted(by: >)

 

κ°’ νšλ“

ν΄λ‘œμ €λŠ” μžμ‹ μ΄ μ •μ˜λœ μœ„μΉ˜μ˜ μ£Όλ³€ λ¬Έλ§₯을 톡해 μƒμˆ˜λ‚˜ λ³€μˆ˜λ₯Ό νšλ“ν•  수 μžˆλ‹€.

 

ν΄λ‘œμ €λŠ” μ°Έμ‘° νƒ€μž…

ν΄λ‘œμ €λŠ” μ°Έμ‘°νƒ€μž…μ΄λ‹€. 즉, ν΄λ‘œμ €λ₯Ό ν• λ‹Ήν•œλ‹€λŠ” 것은 ν΄λ‘œμ €μ˜ λ‚΄μš©λ¬Ό, 즉 값을 ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹ˆλΌ ν•΄λ‹Ή ν΄λ‘œμ €μ˜ μ°Έμ‘°λ₯Ό ν• λ‹Ήν•˜λŠ” 것이닀. 

 

νƒˆμΆœ ν΄λ‘œμ €

ν•¨μˆ˜μ˜ μ „λ‹¬μΈμžλ‘œ μ „λ‹¬ν•œ ν΄λ‘œμ €κ°€ ν•¨μˆ˜ μ’…λ£Œ 후에 호좜될 λ•Œ ν΄λ‘œμ €κ°€ ν•¨μˆ˜λ₯Ό νƒˆμΆœν•œλ‹€κ³  ν•œλ‹€. ν΄λ‘œμ €λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ κ°–λŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ§€κ°œλ³€μˆ˜ μ΄λ¦„μ˜ 콜둠(:) 뒀에 @escaping ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λ‘œμ €κ°€ νƒˆμΆœν•˜λŠ” 것을 ν—ˆμš©ν•œλ‹€κ³  λͺ…μ‹œν•΄μ€„ 수 μžˆλ‹€

 

νƒˆμΆœ ν΄λ‘œμ €λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ κ°–λŠ” ν•¨μˆ˜

var completionHandlers: [() -> Void] = []

func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
	completionHanlers.append(completionHandler)
}

 

μžλ™ ν΄λ‘œμ € 

ν•¨μˆ˜μ˜ μ „λ‹¬μΈμžλ‘œ μ „λ‹¬ν•˜λŠ” ν‘œν˜„μ„ μžλ™μœΌλ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” ν΄λ‘œμ €μ΄λ‹€. 

μžλ™ ν΄λ‘œμ €λŠ” μ „λ‹¬μΈμžλ₯Ό κ°–κ³  μžˆμ§€ μ•ŠλŠ”λ‹€.