Swift로 개발을 하다보면 Any라는 타입을 만나게 된다.예를 들어 어떤 배열의 타입이 Any라면 그 타입에는 어떤 타입이든 들어올 수 있다는걸 뜻한다. 이 글에서는 Any타입의 특징과, 이와 비슷해보이는 AnyObject에대해 알아보도록 하겠다.Any타입의 특징Any타입을 담을 수 있는 배열에는 모든 타입이 들어올 수 있다.var somethings: [Any] = []somethings.append(true)somethings.append(iPhone) // 직접 만든 클래스의 인스턴스somethings.append("something")개발자문서에 따르면 Any타입에 포함될 수 있는 타입은우리가 알고있는 Int, String, Bool타입 등 기본 타입 뿐 아니라 튜플, 클로저 또는 함수타입까지 ..
TableView나 CollectionView에서 CustomCell을 XIB로 생성하게 되면 awakeFromNib()이라는 메서드가 생기게 된다.쉽게 이 함수의 역할을 설명하자면 ViewController에서 viewDidLoad의 역할과 비슷하다고 생각하면 된다. cell의 디자인을 해당 함수에 적용시켜놓으면 cell이 로드될때 보이게 된다. 이번 글에서는 awakeFromNib이 호출되는 시점과 prepareForReuse이 필요한 이유에 대해 알아보도록 하겠다. awakeFromNib의 호출시점원래 셀의 디자인과 데이터에 관련된 코드를 ViewContoller의 `tableView(_ tableView: , cellForRowAt indexPath: )`메서드에서 호출해서 사용했었다. 그러나, ..
FullScreenModal 등으로 화면이 꽉 찬 상태에서 이전 뷰로 돌아가고 싶을 때 다양한 방법이 있을 수 있다.만약 present로 모달이 올라오게 코드로 작성한 상황에서는 dismiss기능으로 모달을 닫을 수도 있다.반면 unwind segue라는 특이한 기능도 있는데, 이는 보통 스토리보드로 개발할때 주로 사용하며, 특정한 화면으로 돌아가고 싶을 때 사용 하는 기술이다.unwind segue를 왜 사용하나요?공식문서를 참고해보면, 뷰컨트롤러를 dismiss할때 사용하는 기능인 unwind segue는 런타임에 해당 세그웨이의 대상을 결정하므로 뷰 컨트롤러 계층을 설정하는 방법에 제한이 없다.예를 들어 다음과 같이 두 개의 VC가 동일한 자식 VC를 표시하는 상황이 있을 때, 다음에 표시할 VC를..
iOS 앱에서 데이터를 로컬에 저장하는 방법은 다양하다.오늘은 그중에서 UserDefaults에 대해서 알아보고, 간단한 사용방법과 함께 구조체를 UserDefaults에 저장하는 방법까지 알아보겠다.UserDefaults란?앱을 사용할 때 서버를 사용하지 않는 이상 데이터를 로컬 즉, iOS 디바이스에 저장해야 한다. 데이터를 로컬에 저장하는 방식에는 UserDefaults, CoreData, SwiftData 등 다양한 방법이 있다.그 중 UserDefaults는 런타임에 메모리에 데이터를 저장하기 때문에 사용자의 기본 설정(닉네임) 등의 단일 데이터 값을 저장하기에 적합하다. 반면 CoreData등은 관계형 데이터베이스를 이용해 대량의 데이터를 저장하기에 적합하다.예를 들어 일기앱의 경우 사용자가 ..
UIKit으로 iOS앱 개발을 할 때 중요하게 여겨지는 것이 앱의 생명주기와 VC의 생명주기이다.앱이 실행중인지, 혹은 종료되었는지, 아니면 백그라운드에서 실행중인지에 따라 개발자가 처리해주어야 하는 동작이 달라질 수 있기 때문이다. 이 글에서는 먼저 앱의 생명주기를 담당하는 AppDelegate와 SceneDelegate에 대해 살펴보겠다. 앱의 생명주기가 뭐지?먼저, 앱의 생명주기란 앱이 켜지거나 꺼질때, 혹은 앱이 백그라운드에 있을때 등의 앱의 상태를 나타내는 말이다.개발자는 이러한 앱의 상태에 따라 특정한 처리를 해줄 수 있다. 크게 앱의 생명주기라고 말했지만 사실 Process Lifecylce과 UI LifeCycle로 구분되어있다.Process Lifecycle이 앱의 실행과 종료일때를 다루..