[문법] Closure

2023. 8. 4. 18:42Swift

320x100

클로저

Closure
명명된 함수를 만들지 않고 함께 실행하는 그룹 코드입니다.

Closure는 코드에서 전달하고 사용할 수 있는 자체 기능 블록입니다. 스위프트의 클로저는 C 및 Objective-C의 block 및 다른 프로그래밍 언어의 lambdas와 유사합니다.

Closure는 상수와 변수가 정의된 Context(코드에서의 조건, 환경)에서 reference를 캡처하고 저장할 수 있습니다. 이를 상수와 변수에 대한 closing이라고 합니다. 스위프트는 캡처의 모든 메모리 관리를 처리합니다.

출처 : https://docs.swift.org/swift-book/documentation/the-swift-programming-language/closures/
let myName : String ={
    //myName으로 들어감
    return "정대리"
}()

print(myName) // 정대리

//클로저 정의
let myRealName : (String) -> String = { (name: String) -> String in
    return "개발하는 \(name)"
}

print(myRealName("쩡대리")) // 개발하는 쩡대리

let myRealNameLogic : (String) -> Void = {(name: String) in
    print("개발하는 \(name)")
}

myRealNameLogic("쩡대리") // 개발하는 쩡대리

클로저 자체는 메소드를 실행시키는 것

매개변수로서 클로저

//completion 이란 클로저를 매개변수로 가지는
//메소드 정의
func sayHi(completion: () -> Void){
    print("sayHi() called")
    sleep(2)	//2초 잠깐 멈추기
    //completion 클로저 실행
    completion()
}

//메소드 호출부에서 이벤트 종료를 알 수 있음
sayHi(completion: { //방법 1
	print("2초가 지났다1")
})
sayHi(){ //방법 2
	print("2초가 지났다2")
}
// 매개변수에서 클로저로 되어있으면 가능
sayHi{ //방법 3
    print("2초가 지났다3")
}
// sayHi() called
// 2초가 지났다1
// sayHi() called
// 2초가 지났다2
// sayHi() called
// 2초가 지났다3
// 매개변수로서 데이터를 반환하는 클로저
func sayHiWithName(completion: (String) -> Void){
    print("sayHiWithName() called")
    sleep(2)
    //클로저 실행과 동시에 데이터를 반환
    completion("오늘도 빡코딩하고 계신가요?")
}

sayHiWithName(completion: { (comment: String) in
    print("2초 뒤에 그가 말했다! comment : ", comment)
})

sayHiWithName(completion: { comment in
    print("2초 뒤에 그가 말했다! comment : ", comment)
})

sayHiWithName{ comment in
    print("2초 뒤에 그가 말했다! comment : ", comment)
}

sayHiWithName{ 
    print("2초 뒤에 그가 말했다! comment : ", $0)
}

//sayHiWithName() called
//2초 뒤에 그가 말했다! comment : 오늘도 빡코딩하고 계신가요?
출처 : 개발하는 정대리 swift 문법 인프런 강의

 

728x90

'Swift' 카테고리의 다른 글

[문법] Error  (0) 2023.08.14
[문법] inout  (0) 2023.08.14
[문법] Generic  (0) 2023.08.03
[문법] 함수의 매개변수  (0) 2023.08.03
[문법] Property Observer  (0) 2023.08.03