swift는 객체지향 언어이자 동시에 함수형 언어
입니다.
따라서 함수는 일급 객체(First-Class Object)로 간주된다.
일급 함수의 특성은 다음과 같다.
Closure와 Block은 compatible하다. 따라서 Swift 의 Closure를 Objective C의 Block에 넘겨줄 수 있다.
Closure와 Block은 비슷한 캡쳐의미를 갖지만 변수 저장 방식이 다르다. Objective-C에서 __block 동작은 Swift의 변수에 대한 기본 동작이다.
var myInt = 10
let myClosure = {
// myInt는 capture되는 순간 reference copy됨
print("myInt : \(myInt)")
}
myInt = 100
myClosure()// Prints "myInt : 100"
//value copy가 필요할 시
//[myInt, ...] 형태로 capture list를 만들어서 변수를 명시
int myInt = 10;
// myInt는 capture되는 순간 value copy됨
void (^myBlock)(void) = ^{
NSLog(@"myInt : %i", myInt);
};
myInt = 100;
myBlock(); // Prints "myInt : 10"
//reference copy로 변경 하려면
//__block 키워드를 capture할 변수 선언시에 명시
참조
https://stackoverflow.com/questions/26374792/difference-between-block-objective-c-and-closure-swift-in-ios
https://www.letmecompile.com/swift-closure-vs-objective-c-block/
https://min-i0212.tistory.com/8
https://medium.com/jinshine-%EA%B8%B0%EC%88%A0-%EB%B8%94%EB%A1%9C%EA%B7%B8/1-%EC%88%9C%EC%88%98%ED%95%A8%EC%88%98-functional-programming-in-swift-5835839b14d3
https://yzzzzun.tistory.com/14
https://hcn1519.github.io/articles/2017-09/swift_escaping_closure