이번에는 아래와 같은 UI를 만들어보고 싶었다. 내가 선택한 텍스트필드에 포커스가 가고, 다음 버튼을 누르면 새로운 필드가 열리며 여기로 포커스가 이동하는 방식을 구현하고 싶었다.ㅤㅤ내가 만들고자한 서비스에서는 텍스트필드의 개수가 정해져있었기에, step 으로 나눠 Visibility 위젯으로 이를 숨겨놨었다. 기타 부수적인 코드를 다 제거하면 아래처럼 작성이 되었다.ㅤList focuseNodeList = [FocusNode(), FocusNode(), FocusNode()];...Visibility( visible: 첫 번째 step 부터, child: Column( children: [ Visibility( visible: viewmodel.focusedStep == ..
이번에도 30분동안 싸운 간단한 문제가 있었다. 이번에 내가 구현하려 했던 부분은 데이터 삭제 후 뷰 새로고침이였다. 되게 간단한 문제였는데, 요녀석이랑 싸우게 된 이유는 자식 위젯에서 데이터를 지우는 로직을 호출하고, 부모 위젯에서 뷰를 업데이트를 해야한다는 점이였다.ㅤㅤ처음에는 단순하게 자식 위젯에 있는 버튼을 누르면 로직을 처리하고, 이에 따라 setState를 호출해 뷰를 업데이트해주려고 했다. 그런데, 분명 setState 함수까지 호출이 잘 되었다고 나오는데 뷰는 제대로 업데이트가 되지 않는 문제가 있었다.// 자식 위젯 코드onPressed() async { await removeLogic() .whenComplete(() { setState(() {}); });}ㅤ여기에서 갖가지 위치에 ..
이번에는 닉네임 검색 기능이 필요해, 아래같은 검색 기능을 구현하고자 했다.ㅤ그런데, 처음에 생각했던 것보다 조금 막막했다…! 😭😭😭😭ㅤ기능 구현에 들어가기 전에는 파이어베이스에 날릴 쿼리를 단순하게 아래처럼 생각했다.“User 컬렉션의 문서들에 대해 문서 내 name 필드에 해당 문자열을 포함하고 있는 문서를 요청해야지”ㅤ그러나, Firebase에 조건을 설정하는 where 함수에는 해당 방식이 포함되어있지 않았다. 기껏 비슷한건 arrayContains 같은거였는데, 이는 객체나 값이 array 타입 필드에 포함되어있는지를 확인하는 조건문이다. 아마 요거를 보고 문자열 패턴 쿼리가 있다고 생각했던 것 같다.ㅤㅤㅤ이걸 처리할 수 있는 쿼리를 지원하지 않는다면, 정녕 모든 사용자 데이터를 다 긁어..
오늘도 로직과 싸우다가 거의 질 뻔 했다. forEach 가 날 살렸ㄷr…ㅤ이번에 겪은 문제 상황은 [ 원본 배열을 순회하면서 각 원소의 값에 대해 연산 수행 → 다른 배열에 값을 업데이트 하는 코드 ]를 map으로 처리해주려 하는 상황이였다. 분명 배열에 값이 들어있는데 map 내부 함수가 실행이 되지 않고, 심지어 print 문도 찍히지 않는 매우매우 기묘한 현상이였다. 그런데 map으로 실행이 안되던게 forEach로 넣어버리니 바로 실행이 되어버리는게 아닌가??🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔ㅤ결론부터 짧게 지르고 시작하자면, forEach는 순회를 하는 함수이고, map은 Iterator를 반환하는 함수이다.forEach는 Eager Evaluation을 수행하는 함수이고, map은 ..
기존에 FutureBuilder를 사용해서 파이어베이스에서 불러오는 데이터에 대해 비동기적인 UI를 만들어본 적이 있었다. 근데, 지금 생각해보면 너무 대충 만들고, FutureBuilder가 하는 역할이 뭔지만 찍먹하고 넘어가버렸던 것 같다.ㅤ그때는 요렇게 데이터가 들어오는 중일 때에는 왼쪽처럼 표시하고, 데이터가 들어오고 나면 오른쪽처럼 정상적으로 숫자가 보여지도록 만들었었다. ㅤ요즘에 앱개발이 재미있기도 하고, 여러가지 UX를 고려한 앱을 만들어내고싶다는 욕심이 생기고 있어서 비동기 UI 부분도 조금씩 건드려보려고 하고 있다. 바로 위에 만든 것도 어떻게 보면 비동기를 건드린 것이기는 하지만, 좀 더 미적인 느낌이 필요하지 않나 라고 생각된다. ㅋㅋㅋㅤ현재 내가 진행하고 있는 프로젝트에서는 비동기로..
TCA에 대한 공부를 시작하기 전에 MVVM에 대해 살펴보다가 아래의 아티클을 발견했다.https://medium.com/@esung/mvc-정말제대로알고계신가요-875f1323f6c0 MVC, 정말제대로알고계신가요?저는 꽤 최근까지 MVC라고 하면 모든 개발자가 같은 개념을 떠올린다고 생각했습니다. 애시당초 디자인패턴이나 아키텍처를 배우는 이유가 다른 개발자, 특히 다른 도메인의 개발자들과의 의사medium.com내가 알고있던 애플에서 사용하는 MVC는 사실은 전형적인 MVC와는 다른 구조라는 내용이였다. 또잉…? 이게 무슨 소리야?? 라고 생각하면서 글을 좀 살펴봤는데, 맞는 말을 던지고 있는 것 같았다.ㅤ그래서 요 충격을 받은 기회에, MVC를 간략하게 짚고 넘어가려고 찾아봤고, 이를 간단히 여기에..
이번에 TCA를 공부하려고 자료를 열심히 보고 있었는데, 아카데미 멘토였던 young의 반가운 글이 보였다!https://gist.github.com/unnnyong/439555659aa04bbbf78b2fcae9de7661 swiftui_mvvm.mdGitHub Gist: instantly share code, notes, and snippets.gist.github.com SwiftUI와 MVVM의 궁합이 썩 좋지만은 않다는 일본 글을 영이 번역을 해둔 글이였는데, 요 번역글이 꽤나 임팩트가 있었는지, 여러 블로그에서 위 아티클을 인용해서 요약해두거나, 저마다의 생각을 덧붙여둔 것을 볼 수 있었다. 이때까지 Presentation 계층의 아키텍처에 대해서 나도 특별한 생각없이 왼손에는 MVC, 오른손..
iOS 취업 공고의 자격요건과 우대요건들을 간략하게 정리해봤다! 다른 취준생들의 시간을 아껴주는 포스트가 되기를 바란다 :) 올해 안에 졸업을 하기 위해서는 나는 올해 하반기에 인턴을 진행해야 한다 ㅜㅜ 막상 iOS 인턴을 지원해보려고 하니, 나에게 프로젝트에 대한 경험은 몇 개 있지만 기술력에 있어서는 경쟁력이 있다고 생각이 들지 않았다. 기획이나 디자인 과정에 참여하고 협업을 할 줄은 알지만, 막상 비동기를 활용한 개발을 능숙하게 처리한다거나 Restful api를 활용한 개발을 진행하지는 않았기에 취준에 어려움이 있을 것 같다는 생각이 들었다. iOS 분야는 인턴이나 신입 포지션도 잘 없는데, 몇 없는 좋은 기회들을 날려버리기는 너무 아쉽다는 생각에 남은 기간동안 내가 준비할 수 있는 부분들을 최대..
이번에 야곰 리펙토링 강의를 들으면서 Swift의 “프로토콜” 이 다른 언어에 비해 굉장히 특이한 컨셉을 가지고 있다는 걸 알았다. 어떻게 보면 abstract class나 interface를 통해 구현하는 OOP의 개념들이 프로토콜에 담겨있는데, 이게 구조체나 enum 타입에 모두 적용되게 한다는게 꽤나 놀라운 일이라고 생각된다. 구조체는 값 타입이라며!!! enum도 값 타입이라며!!! 내용이 나왔던 김에 강의에서 소개해준 관련된 WWDC 영상들을 보면서 어떤 컨셉으로 설계되었고, 어떻게 동작하는 건지 공부하면서 한 번 정리해보려고 한다. What I Learned 이번에 본 [ WWDC 15 의 Protocol-Oriented Programming in Swift ] 는 이미 많은 사람들이 블로그에..
이번에 최적화 과제를 수행하며 여러 글들을 찾아헤매다가 DateFormatter를 사용할 때 마다 생성해서 사용하는게 시간이 많이 잡아먹는 비싼 행위이기 때문에, 그렇게 하는 대신에 DateFormatter를 하나 생성해두고 재활용을 해야한다는 글을 봤다. 생각보다 다양한 글에서 해당 이슈에 대해 다루고 있었고, 직접 실행 시간을 측정하면서 성능을 비교하는 글들도 많았다. ㅤ 해당 글 들에서 다룬 방법을 나도 한 번 적용해보면서 함수의 성능을 측정하는 방법도 배우고 내가 개선한 방법이 유의미한 개선을 가져왔는지도 한 번 테스트해보려고 한다! ㅤ 테스트는 요 사이트에서 사용한 방법을 참고해 시도해봤다. https://sarunw.com/posts/how-expensive-is-dateformatter/ ㅤ..