오늘은 Swift의 클로저와 캡처리스트에 대해 이야기해보려 합니다. 특히 클로저에서 값 타입과 참조 타입의 캡처 방식과 순환 참조 문제를 해결하는 캡처리스트의 중요성에 대해 집중적으로 다루겠습니다. 클로저의 기본 캡처 방식 Swift에서 클로저는 기본적으로 외부의 변수를 캡처할 때 참조 타입으로 캡처합니다. 즉, 값 타입이든 참조 타입이든 상관없이 클로저 내부에서는 모두 참조로 취급됩니다. 이는 매우 편리한 기능이지만, 때로는 메모리 관리나 예상치 못한 동작을 야기할 수 있는 문제점을 내포하고 있습니다. 캡처리스트와 값 타입의 복사 클로저에서 캡처리스트를 사용하면, 이야기가 조금 달라집니다. 캡처리스트를 사용하면 값 타입을 복사해서 가져올 수 있습니다. 이는 값 타입이 원래 값을 유지하면서 클로저 내부에..
안녕하세요, 지난 포스트에서는 Delegate 패턴을 이용한 뷰 간의 상태 변화 알리기에 대해 알아보았습니다. 이번에는 Delegate 패턴에 이어서 클로저와 NotificationCenter를 활용하여 뷰 간의 상태 변화를 알리는 방법에 대해 알아보겠습니다. 1. 클로저를 활용한 상태 변화 알리기 Swift에서 클로저는 자유 변수와 관련있는 코드 블록입니다. 함수처럼 이름이 없으며, 독립적으로 사용할 수 있습니다. 클로저를 활용하면 상태 변화를 효율적으로 관리할 수 있습니다. class FirstViewController: UIViewController { var myClosure: (() -> Void)? func myFunction() { myClosure?() } } class SecondView..
클로저는 스위프트에서 거의 공기 같은 존재여서 인터넷에 깔끔하게 정리를 잘한 곳이 많기에 여기에는 내가 헷갈리기 쉬운 것들을 기재해보려고 한다. 1. 클로저 간소화 클로저에는 여러 가지 방법으로 표현을 간소화할 수 있습니다. 그래서 오히려 때로는 헷갈리는 경우가 많습니다. 아래의 코드는 클로저의 여러 표현법을 한 번에 비교하기 쉽게 모아두었습니다. var result: Int func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int { return method(a, b) } // 후행 클로저 - 마지막 인자가 함수이면 이렇게 밖으로 뺴서 클로저를 보기좋게 만들 수 도있습니다. result = calculate(a: 10, b: 10) { (lef..