layoutMargins 뷰의 경계선과 컨텐츠 사이의 공간. 웹에서의 padding과 같은 역할. UIEdgeInsets 타입. 스토리보드에서 Editor -> Canvas -> Layout Rectangle을 통해 확인 가능. Constrain to margins 오토레이아웃을 margin에 맞출것인지, superView의 경계선에 맞출것인지를 체크하는 옵션 subView를 추가하고 constraints를 파란뷰의 constraints를 상하좌우 0,0,0,0으로 주면 superView인 붉은색 뷰의 margins를 기준으로 레이아웃이 잡힌것을 확인 constrain to margins를 끈채로 constraints를 상하좌우 0,0,0,0으로 주면 View의 경계선을 기준으로 레이아웃이 적용 UIEd..
각 화면마다 addSubView를 통해 로딩 뷰 화면을 일일히 붙여주는것은 너무 귀찮아서, 어떤식으로 하면 함수 하나를 호출하는 것만으로 로딩뷰를 띄울수 있을까 고민했습니다. 현재 생각나는 방법은 protocol의 extension을 이용해 현재 화면을 인자로 전달하고, addSubView로 화면을 추가하는 방법과 최상위뷰에 addSubView를 하여 화면을 추가하는 방법을 생각했습니다. 참고로 여기서 말하는 최상위 뷰는 아래의 view hierarchy에서 맨 앞에 위치한 뷰가 아닌, 가장 뒷쪽에 위치한 View를 말합니다. 왜 뒷쪽에 있는 view를 최상위뷰라고 하냐면 뷰를 추가하면 아래와 같이 최상위 뷰에서 뷰를 추가를 하면 아래 사진처럼 탑다운 형식이 되기에 가장 뒤에있는 뷰를 최상위 뷰라고 하는..
Notifications란? 정보를 브로드캐스팅하고, 브로드캐스트를 구독하기 위한 디자인 패턴입니다. 즉 일대다수의 이벤트를 전달 할 때 유용하게 사용 할 수 있습니다. Notifications의 구성 Notification : NotificationCenter에 등록된 관찰자들에게 브로드캐스트되는 정보를 위한 컨테이너 NotificationCenter : 관찰자를 등록, 알림을 송신하는 매커니즘 NotificationQueue: 알람을 등록, 자신이 원할때 알람을 송신해줄 수 있도록 해주는 알림 버퍼 NotificationCenter 매커니즘 NotificationCenter을 통해 특정 알람을 받을 Observer를 추가 하고, Post를 통해 해당 Observer에 알람을 보낼 수 있습니다. 우측에..
에러 내용 : Assertion failed: This is a feature to warn you that there is already a delegate (or data source) set somewhere previously. The action you are trying to perform will clear that delegate (data source) and that means that some of your features that depend on that delegate (data source) being set will likely stop working. If you are ok with this, try to set delegate (data source) to `nil` i..
처음 Keyboard Extension으로 키보드 확장 프로그램을 개발 할 때 한글 조합이 알아서 되는줄 알았지만, 스스로 조합이 되지 않았다. 안드로이드는 자동으로 조합을 해주는데 ios에서는 스스로 알고리즘을 만들어야 합니다.. 오토마타에 관해 전공수업을 들었어서 한글 오토마타를 구상, 알고리즘으로 구현해보았습니다. 일단 알고리즘을 제작하기전 오토마타 그래프를 만들었습니다. 알고리즘을 구현하는데 Stack을 사용해서 한글을 지울때 이전 상태로 돌아가서 다음 상태로 이동할 수게 구현해서 처음부터 한글을 조합하는 작업을 하지 않아도 되서 좀 더 효율적인 알고리즘으로 구현했습니다. 메멘토 패턴을 이용한것이라 볼 수 있습니다. enum HangulStatus { case start //s0 case chos..
요즘 앱 로그인 할때 대부분 소셜 로그인을 사용합니다. 토이 프로젝트를 진행 할 때 소셜로그인을 넣으려고 했는데, 각 소셜 로그인마다 ViewModel에 googleLogin, kakaoLogin, appleLogin..등등 각 로그인 함수를 넣어서 구현하는것은 SOLID 원칙에도 위배되고, 각 케이스 마다 비슷비슷한 코드를 써야하기에 비효율적이라 생각해 클린 아키텍처를 사용해서 구현해 보게되었습니다. 우선은 전체적인 Coordinator 패턴 흐름도입니다. AppCoordinator의 start에서 로그인을 했는지 안했는지 판단하고 로그인을 했으면 오토로그인, 하지 않는 경우에는 로그인뷰를 보여주게 됩니다. 여기서 LoginRepository는 각각 구글, 카카오, 애플 로그인 오브젝트를 말합니다. 각..