[240228] TIL

YoungHyun Kim·2024년 2월 28일
1

TIL ✍️

목록 보기
53/68

🔥Firestore

오늘은 데이터 넣고 읽고 지울 수 있는 메서드를 만들었습니다.

데이터 수정 메서드는 오류가 있기 때문에 수정하는 중 ^^

// DataManager.swift

func createUserData(user: UserData) {
        let userCollection = db.collection("Users")
        let query = userCollection.whereField("ID", isEqualTo: user.ID)
        
        query.getDocuments{ (snapshot, error) in
            guard let captured = snapshot, !captured.isEmpty else {
                self.db.collection("Users").document().setData([
                    "ID": user.ID,
                    "Password": user.password,
                    "Name": user.name,
                    "PhoneNumber": user.phoneNumber
                ])
                UserDefaults.standard.set(user.ID, forKey: "ID")
                UserDefaults.standard.set(user.password, forKey: "Password")
                print("회원가입 완료")
                return
            }
            print("이미 같은 ID로 회원가입이 되어있음")
        }
    }
    
    func readUserData(userID: String) {
        let query = db.collection("Users").whereField("ID", isEqualTo: userID)
        
        query.getDocuments { (snapshot, error) in
            guard let snapshot = snapshot, !snapshot.isEmpty else {
                // 데이터 없을 때
                print("사용자의 ID로 된 데이터가 없습니다.")
                return
            }
            // 데이터 있을 때
            print("데이터를 읽어옵니다.")
            for document in snapshot.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }
    
    func deleteUserData(userID: String) {
        let userCollection = db.collection("Users")
        let query = userCollection.whereField("ID", isEqualTo: userID)
        
        query.getDocuments{ (snapshot, error) in
            guard let snapshot = snapshot, !snapshot.isEmpty else {
                print("데이터가 없어용")
                return
            }
            let ref = userCollection.document(snapshot.documents[0].documentID)
            
            ref.delete()
            print("데이터 삭제 완료")
        }
    }

Firebase 공식 문서에는 매 연산마다 try 키워드와 await 키워드를 사용해서 비동기, 에러 처리를 해줘야 하는 것으로 나오는데, 어제의 TIL에서 작성했듯이 Thread 1: EXC_BAD_ACCESS에러를 해결할 지식이 부족하기 때문에 그냥 메서드를 구성했습니다...

그래도 작동을 잘 하는 것이면 된게 아닐까요?! ^^ 내일은 수정하는 메서드 완성한 후, 프로젝트 와이어프레임을 참고해서 각 화면에서 DataManager의 메서드를 사용하기 쉽도록 구성하도록 하겠습니다!

profile
iOS 개발자가 되고 싶어요

0개의 댓글