Alamofire는 URLSession을 쉽게 사용하게 해 주고 statusCode에 따른 응답 유효성 검사, 응답값 디코딩 등등 여러 가지 편의 기능들을 여럿 지원해 준다. 대표적인 기능으로는 요청을 보낼때마다 공통적인 부분 혹은 로직을 분리해서 재사용할 수 있게 해주는 Interceptor, 요청을 보낼 때 어떻게 작동하고 있는지 Console의 출력을 통해 보여주는 EventMonitor 기능등이 있다. 이러한 기능들은 쉽게 사용할 수 있도록 기본적인 구현이 제공된다. Alamofire에서 기본적으로 구현된것만으로 많은 오픈 API를 대응할 수 있다. 구글링을 통해 Alamofire를 사용하는 코드를 보면 대부분이 이 코드 혹은 이 코드에서 크게 벗어나지 않을 것이다. AF.request("http..
결론부터 말하자면 lazy와 weak를 동시에 사용할 경우 객체가 즉시 해제되어서 정상적으로 작동할 수 없으므로 컴파일 오류가 뜬다. lazy 프로퍼티 lazy 프로퍼티는 처음 객체가 생성될때 초기화 되는 것이 아닌 해당 프로퍼티가 사용될 때 초기화 되는 프로퍼티 weak 해당 프로퍼티가 약한 참조로 Reference Counter를 올리지 않게 되며, 해당 객체가 런타임 도중 할당이 해제되면 해당 프로퍼티는 nil값으로 변경된다. lazy 와 weak를 같이 쓴다면 class B { var hello = "Hello" } class A { lazy weak var b: B? = B() func asd() { print(b!.hello) } } let a = A() 이런 코드가 있다고 해보자. 여기서 A..
프로젝트를 진행하던 도중, 아래와 같은 화면을 만들어야 했다. UILabel과 언더라인 뷰를 하나의 스택뷰로 만들어서 UILabel안에 입력된 크기에 따라 width가 변하는 하나의 스택뷰를 만들기로 결정. 글자크기는 80pt로 주고 스택뷰로 묶어서 만든 결과 이런 결과가 나왔다. 상하 여백이 넓게 존재해, 디자인한 UI와 맞지 않는다. 처음에는 이를 해결하기 위해 sizeToFit()함수를 사용했지만 여전히 똑같이 나온다. 글자가 UILabel의 중심에 있는것으로 보아, 이를 설정할 수 있는 변수가 존재한다고 생각하고, 공식 문서를 뒤져봤지만 존재하지 않았다. 몇 시간의 삽질 끝에 원인을 찾아냈다. 이런 문제가 발생한 이유 원인은 UILabel 자체가 아닌 font자체에 있다. 영어 노트를 생각해 보면..
각 화면마다 addSubView를 통해 로딩 뷰 화면을 일일히 붙여주는것은 너무 귀찮아서, 어떤식으로 하면 함수 하나를 호출하는 것만으로 로딩뷰를 띄울수 있을까 고민했습니다. 현재 생각나는 방법은 protocol의 extension을 이용해 현재 화면을 인자로 전달하고, addSubView로 화면을 추가하는 방법과 최상위뷰에 addSubView를 하여 화면을 추가하는 방법을 생각했습니다. 참고로 여기서 말하는 최상위 뷰는 아래의 view hierarchy에서 맨 앞에 위치한 뷰가 아닌, 가장 뒷쪽에 위치한 View를 말합니다. 왜 뒷쪽에 있는 view를 최상위뷰라고 하냐면 뷰를 추가하면 아래와 같이 최상위 뷰에서 뷰를 추가를 하면 아래 사진처럼 탑다운 형식이 되기에 가장 뒤에있는 뷰를 최상위 뷰라고 하는..
Notifications란? 정보를 브로드캐스팅하고, 브로드캐스트를 구독하기 위한 디자인 패턴입니다. 즉 일대다수의 이벤트를 전달 할 때 유용하게 사용 할 수 있습니다. Notifications의 구성 Notification : NotificationCenter에 등록된 관찰자들에게 브로드캐스트되는 정보를 위한 컨테이너 NotificationCenter : 관찰자를 등록, 알림을 송신하는 매커니즘 NotificationQueue: 알람을 등록, 자신이 원할때 알람을 송신해줄 수 있도록 해주는 알림 버퍼 NotificationCenter 매커니즘 NotificationCenter을 통해 특정 알람을 받을 Observer를 추가 하고, Post를 통해 해당 Observer에 알람을 보낼 수 있습니다. 우측에..
처음 Keyboard Extension으로 키보드 확장 프로그램을 개발 할 때 한글 조합이 알아서 되는줄 알았지만, 스스로 조합이 되지 않았다. 안드로이드는 자동으로 조합을 해주는데 ios에서는 스스로 알고리즘을 만들어야 합니다.. 오토마타에 관해 전공수업을 들었어서 한글 오토마타를 구상, 알고리즘으로 구현해보았습니다. 일단 알고리즘을 제작하기전 오토마타 그래프를 만들었습니다. 알고리즘을 구현하는데 Stack을 사용해서 한글을 지울때 이전 상태로 돌아가서 다음 상태로 이동할 수게 구현해서 처음부터 한글을 조합하는 작업을 하지 않아도 되서 좀 더 효율적인 알고리즘으로 구현했습니다. 메멘토 패턴을 이용한것이라 볼 수 있습니다. enum HangulStatus { case start //s0 case chos..