Building ifelse 아래에서는 R이 사용하는 통계 프로그래밍 언어와 같은 ifelse() 문을 구현. // R ifelse(condition, valueTrue, valueFalse) Swift 삼항 연산자 condition ? valueTrue : valueFalse 과 동일한 작업을 수행. 플레이그라운드에 아래 코드를 작성. func ifelse(condition: Bool, valueTrue: Int, valueFalse: Int) -> Int { if condition { return valueTrue } else { return valueFalse } } let value = ifelse( condition: Bool.random(), valueTrue: 100, valueFalse: ..
1급 객체(First class citizen)와 고차함수(고계함수) 프로그래밍 언어에서 1급 객체란 아래의 조건을 충족시키면 됩니다. 1. 변수나 데이터에 할당 할 수 있어야 한다. 2. 객체의 매개변수로 넘길 수 있어야 한다. 3. 객체의 반환값으로 리턴 할수 있 swifty-cody.tistory.com 이전에 썼던 고차함수 글에 이어서, Swift 표준 라이브러리에서 지원하는 고차함수인 filter, reduce, map을 정리해보겠습니다. 이 고차함수들은 컨테이너 타입(Array, Dictionary, Set, ...)에 구현되어 있는 제네릭 함수입니다. 우리가 주로 for문을 돌면서 어떤 결과를 추려낼 때 하던 작업을 이 함수들로 대체할 수 있습니다. // 예시로 사용할 컨테이너 let som..
먼저 작성한 글에서 클로저는 특정문맥의 상수, 변수 값을 참조로 캡쳐링한다고 정리했습니다. 클로저와 값 캡쳐 클로저는 특정 문맥의 상수나 변수의 값을 캡쳐할 수 있습니다. 이는 원본 값이 사라져도 클로져의 body안에서 그 값을 활용할 수 있다는 이야기입니다. Swift에서 값을 캡쳐 하는 가장 단순한 형 swifty-cody.tistory.com 캡쳐 리스트 캡쳐링을 하는 값의 참조 규칙을 캡쳐리스트를 통해서 정해줄 수 있습니다. 클로저의 캡쳐리스트 내에 정의하면 캡쳐링할 때 본래의 타입에 맞게 캡쳐링되도록 사용되게 할 수 있습니다. 즉, 값 타입은 클로저가 생성될 시점의 값이 copy되어지고, 참조 타입은 클로저가 호출되는 시점에 참조되어 사용되도록 사용되어지게 합니다. 캡쳐리스트는 클로저 in 앞에..
Swift에서는 함수가 1급객체이기 때문에 함수를 매개변수로 넣을수가 있습니다. 1급 객체(First class citizen)와 고차함수(고계함수) 프로그래밍 언어에서 1급 객체란 아래의 조건을 충족시키면 됩니다. 1. 변수나 데이터에 할당 할 수 있어야 한다. 2. 객체의 파라메터로 넘길 수 있어야 한다. 3. 객체의 리턴값으로 리턴 할수 있 swifty-cody.tistory.com 이 때 함수가 끝나고 실행되거나 함수 밖에 저장되는 클로저일 때, (RxSwift에서 onNext, onComplete, onError이벤트 클로저 같은) 보통 비동기 작업 후 실행되는 (completeHander로 많이 쓰이는)클로저는 매개변수 타입 앞에 @escaping 키워드를 명시해주어야 합니다. 명시해주지 않았..