문법적으로 Escaping Closure에 대해 봤을 때는 많이 와닿지 않았는데 네트워크 통신할 때 꼭 필수템이었던 것... 전에 프로젝트를 할 때에는 아무 생각없이 Escaping Closure를 사용했었는데 부트캠프 이후 한층 더 성장한 개발자가 되었나... 하튼 네이버의 언어감지 API와 파파고 API를 사용하여 번역 앱을 만들고 있었는데 print를 찍어봤을 때에는 올바르게 통신하여 잘 주고 받았다. 그런데 UI상에서는 자꾸 빈 문자열이 보여... 체크 포인트를 찍어서 확인해보니 UI를 그리는 함수가 API 통신 하는 함수보다 빨리 실행되고, 그 이후에 API 통신 하는 함수 내부 로직들을 실행하네.. NetworkManager 파일에서 서버 response값을 받아오는 작업이 끝났을 때 호출하려..
최종 프로젝트를 진행하다가 위 사진처럼 알림 탭에 예약내역과 사장님의 공지사항을 한 번에 보여줘야하는 상황이 생겼는데 2가지 다른 타입의 Model을 합쳐 하나의 ForEach문에 돌릴 때 어떤 Hashable을 사용해야할 지 몰라 에러가 났다. 구글링을 해보니... Swift에서 직접적으로 해시 테이블을 구현해서 사용할 일이 거의 없다고ㅎㅎ 그런데 사용할 필요가 없지만 커스텀하여 사용했다.ㅋㅋㅋㅋㅋㅋ 왜 사용했을까를 곰곰히 생각해보다가 Hashable이라는 것 자체를 잘 몰라서 그 땐 이게 최선이었던 것 같다. 우선 Hash라는 것부터 알아봐야겠다. 1. 해쉬란 데이터를 다루는 기법 중 하나 2. 데이터를 간단한 숫자로 표현 3. 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)..
원래 기획했던 Home 탭에 UI는 Open API 에서 제공하는 데이터 구조와 달랐고, 원하는 대로 디자인을 기획하려면 1개 가게에 대한 정보들을 for문을 돌려 임의로 반려동물 동반할 수 있는 가게들에 대한 디테일한 정보들을 알려주는 Json 데이터들을 가져오게 한 뒤 pets라는 배열에 담았다. 또 데이터가 없는 상황을 대비하여 nil이 아닐 경우에만 pets라는 배열에 담도록 분기처리를 해주었다. func fetchDetailPetStoreData(_ partCode: String) async { do { for num in 1 ... 250 { let pets = try await webService.fetchPetData(url: "https://www.pettravel.kr/api/detai..
나만의 그림 일기 앱을 만들다가 생겨난 버그인데 그림을 그리고, 내용을 작성하고 추가 버튼을 누르면 파이어베이스 Storage에는 그림 사진이, 그린 그림을 사진으로 변환하고, 변환한 사진을 Firebase Storage에 업로드. 작성한 내용과 사진에 대한 경로를 Firebase Firestore에 추가. 그 후 업로드가 되면 해당 FullScreen 모달 시트 창을 닫는다. 까지가 버튼에 대한 액션이고, 시트 창이 꺼지면 onDIsmiss에서 데이터를 다시 불러와 뷰를 새로 그려주게끔 코드를 구현했다. 그런데 새로 추가된 게시글의 사진만 불러오지 못하는 현상이 생겼다. 함수가 진행되는 모든 곳에 브레이크 포인트를 찍어 확인해보았는데 스토리지에 올라와있는데 못불러온다. 그 짧은 찰나에 아직 내부적으로 ..
우선 DB구조는 Users라는 루트 컬렉션에 각 유저 정보들을 담는 다큐먼트들이 있고, 유저 한 사람의 다큐먼트에 Posts 라는 하위 컬렉션을 생성하였다. 1. Document Path를 알 수 있는 방법 - parent 메서드 쓰기: CollectionReference를 통해 상위 DocumnetId와 CollectionId를 가져올 수 있다. document.reference.parent.parent?.getDocument { snapshot, error in if let snapshot { for documentTest in snapshot.document { print(snapshot) print(snapshot.documentID) } } } document.reference.parent.pa..
개인 프로젝트를 하다보면 서버 개발자가 없을 때 데이터들을 저장할 곳이 필요하다. 그래서 Firebase를 사용하여 데이터들을 관리하게 되는데 사용하기 전에 RDBMS와 NoSQL에 대해 알아보고자 한다. 먼저 내가 생각하는 둘의 느낌을 보자면 아래 사진 같다. 사진예시가 많이 아쉬운데 적절한 사진을 잘 못찾았다. RDBMS는 잘 정리되고 관계적으로 데이터가 연결되어있는 느낌이라면, NoSQL은 흩뿌려진 느낌으로 정리가 되지 않는 느낌이다. 먼저 데이터를 저장하는 프로그램 중 하나인 RDBMS를 알아보자. Relational DataBase Management System의 줄임말로 모든 데이터들이 관계되어있는 구조를 뜻한다. 테이블 형식으로 데이터를 구성하는데 Jero가 한국은행의 서울카드를, 네로가 ..
Cannot assign to property: 'self' is immutable SwiftUI를 시작할 때 자주 보는 에러이다. 그런데 가끔 놓치는 부분인 것 같다. 바로 실행하는 동안 값을 바꿀 수 없다는 내용의 에러인데 아래와 같이 count를 세는 변수가 있으면 SwiftUI에서는 값을 바꿀 수 있는 @State 프로퍼티 래퍼를 써줘야한다. 꼭 명심할 것!!! // 에러 var count: Int = 0 // 에러 해결 @State private var count: Int = 0
swift는 역시 타입에 민감한 언어라는 것을 다시 한 번 깨달았다. 테스트해보고자 필요한 변수들을 나열하고 데이터가 뷰에 잘 뿌려지는 지 정도만 확인해보려고 하는데 아래 에러가 떠서 아예 프리뷰 캔버스가 로드가 되지 않는 상황이 왔다. The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions 컴파일러가 합리적인 시간 안에 타입 체크를 할 수 없다. 이런 내용의 에러였다... 10개가 채되지 않는 변수들에 대해 타입 추론을 똑똑하게 해낼 줄 알았는데 생각보다 많은 변수에 xcode도 힘들어했나보다. // 에러가 난 코드 @S..