본문 바로가기
프로그램 개발해서 돈벌기/iOS

[Swift] 클로저 (Closure)

by ubmuhan 2022. 10. 12.
반응형

특정 기능을 캡슐화 하거나 작업이 완료되었을 때 실행할 콜백 코드를 구현한다.

  • 전역 함수
  • 내포된 함수
  • 익명 함수

swift는 익명 함수 형태다. 표현식은 인라인 클로저 (Inline Closure)를 작성한다.

 

// 파라미터와 리턴형이 없은 경우
{ 실행할 코드 }

let clsr = { print("Hello World") }
clsr()
// Hello World

// 파라미터와 리턴형이 있는 경우
{ (파라미터 목록) -> 리턴형 in 실행할 코드 }

let clsr = { (str: String) -> String in 
    return "Hello, \(str)"
}

let result = clsr(" World")
print(result)
// Hello World

func funcClsr(_ c: (String) -> (String)) {
     let result = c(" World")
     print(result)
}

let clsr = { (str: String) -> String in
    return "Hello \(str)"
}

funcClsr(clsr)
// Hello World

// list 정렬
let nums = [2, 1, 3, 5, 4]
let orderNums = nums.sorted(by: { (left: Int, right: Int) in
    return left < right
})
print(orderNums)
// 1, 2, 3, 4, 5

// 위 정렬의 다른 표현
let orderNums = nums.sorted(by: <)
print(orderNums)
// 1, 2, 3, 4, 5

1. Trailing Closure

// Inline Closure
runClsr({ "Hello \($0)" })

// Trailing Closure
runClsr() { "Hello \($0)" }

runClsr { "Hello \($0)" }

2. 클로저에 값 할당 시점

var num = 0

let clsr = { print( "inside : \(num)") }

num += 10

print("outside : \(num)")

num += 10

clsr()

// outside : 10
// inside : 20

3. GCD , Enumeration 에서 클로저

// GCD
// 지정된 시간 이후 호출
DispatchQueue.main.asyncAfter(deadline: .nuw() + 3) {
    print("Hello World")
}

// Enumeration
let list: NSArray = ["one", "two", "three"]
list.enumerateObjects(options: NSEnumerationOptions.concurrent) {
  (element, index, stop) in
      print(element)
}
 
반응형

'프로그램 개발해서 돈벌기 > iOS' 카테고리의 다른 글

[Swift] 샘플로 알아 보는 간단한 상속 개념  (0) 2022.10.21
[Swift] 튜플 (Tuple)  (0) 2022.10.13
[swift] 값 형식과 참조 형식  (0) 2022.10.11
[swift] 옵셔널 (Optional)  (0) 2022.10.11
pod  (0) 2022.10.07

댓글