Swift) Swift Closure vs Objective-C Block

hansangjin96·2020년 9월 14일
0

본 블로그는 개인적인 공부 및 저장의 용도 작성됐습니다.

Swift 의 Closure 과 Objective C의 Block 차이점 비교

  • Closure와 Block은 compatible하다. 따라서 Swift 의 Closure를 Objective C의 Block에 넘겨줄 수 있다.

  • Closure와 Block은 비슷한 캡쳐의미를 갖지만 변수 저장 방식이 다르다. Objective-C에서 __block 동작은 Swift의 변수에 대한 기본 동작이다.


Swift에서의 Capture

var myInt = 10
 
let myClosure = {
    // myInt는 capture되는 순간 reference copy됨
    print("myInt : \(myInt)")
}
 
myInt = 100
 
myClosure()// Prints "myInt : 100"
//value copy가 필요할 시 
//[myInt, ...] 형태로 capture list를 만들어서 변수를 명시

Objective-C 에서의 Capture

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/

profile
iOS Developer

0개의 댓글