Swift) Fuctional Programming, Closure

Havi·2020년 12월 20일
0

Swift기초

목록 보기
9/19
post-custom-banner

1. 함수 형 (Function Types)

swift는 객체지향 언어이자 동시에 함수형 언어입니다.
따라서 함수는 일급 객체(First-Class Object)로 간주된다.

일급 함수의 특성은 다음과 같다.

  1. 객체가 런타임에도 생성이 가능
  2. 인자값으로 객체 전달 가능
  3. 반환값으로 객체 사용 가능
  4. 변수나 데이터 구조 안에 저장 가능
  5. 할당된 이름과 관계 없이 고유한 구별 가능

함수 형의 사용 (Using Function Types)

파라미터 형으로써의 함수 형 (Function Types as Parameter Types)

반환 형으로써의 함수 형 (Function Types as Return Types)

중첩 함수 (Nested Functions)

2. 클로저(Closure)

비 순수 함수

순수함수

클로저 / 익명함수

고차함수

트레일링 클로저(Trailing Closure)

@escaping

클로저 함수 외부에 저장하기

Async in async

@autoclosure


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/
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

profile
iOS Developer
post-custom-banner

0개의 댓글