본문 바로가기

프로젝트

(83)
22. 버그수정 #2 버그수정 #2 fetchTweets의 정렬 문제, SideMenu의 배경색 문제 fetchTweets의 정렬 문제 지금도 Tweet들을 Firebase에서 가져오는 데에는 문제가 없지만, 사소하지만 대단히 중요한 문제가 하나 있다. 바로 Tweet이 글을 작성한 순서대로 표시되지 않는다는 점이다. 해당 문제를 해결하기 위해 두 가지 접근법을 사용한다. fetchTweets의 정렬 문제 | FeedView의 경우, Firebase order Firestore.firestore().collection("tweets").order(by: "timestamp", descending: true).getDocuments { snapshot, _ in guard let documents = snapshot?.docu..
21. DB와 연결하기 #3 DB와 연결하기 #3 ProfileView에 실제 데이터 연결하기 ProfileView에 실제 데이터 연결하기 | ProfileView 더보기 Source import SwiftUI import Kingfisher struct ProfileView: View { @State private var selectedFilter: TweetFilterViewModel = .tweets @Environment(\.dismiss) var dismiss @Namespace var animation private let user: User init(user: User) { self.user = user } var body: some View { VStack(alignment: .leading) { headerView ..
20. 기능 구현 #8 기능 구현 #8 TweetRowView 데이터 연결 TweetRowView 데이터 연결 | FeedViewModel 이전에 구현한 대로라면 FeedView가 표시되고, FeedViewModel을 호출하는 순간, fetchTweets 메서드가 작동하게 된다. class FeedViewModel: ObservableObject { @Published var tweets = [Tweet]() let service = TweetService() init() { fetchTweets() } func fetchTweets() { service.fetchTweets { tweets in self.tweets = tweets } } } Tweet은 위와 같이 내용, 좋아요 카운트, 작성 날짜, 유저 정보(uid)를 가..
19. 기능 구현 #7 기능 구현 #7 Tweet 가져오기 Tweet 가져오기 | Tweet Model Firebase에 저장된 Tweet의 모습이다. 이 데이터들을 앱에서 보여줄 수 있도록 객체화가 필요하다. import FirebaseFirestoreSwift import Firebase struct Tweet: Identifiable, Codable { @DocumentID var id: String? let caption: String let timestamp: Timestamp let uid: String var likes: Int var user: User? } Identifiable과 Codable 프로토콜을 채용한 Tweet 구조체를 하나 정의했다. Tweet의 id에 해당하는 DocumentID는 Identif..
18. 기능 구현 #6 기능 구현 #6 트윗 작성 트윗 작성 | NewTweetView struct NewTweetView: View { @State private var caption = "" @Environment(\.dismiss) var dismiss var body: some View { VStack { HStack { Button { dismiss() } label: { Text("Cancel") .foregroundColor(Color(.systemBlue)) } Spacer() Button { print("tweet") } label: { Text("Tweet") .bold() .foregroundColor(.white) .padding(.horizontal) .padding(.vertical, 8) .backg..
17. 기능 구현 #5 기능 구현 #5 유저 검색 기능 유저 검색 기능 | SearchBar 29. List의 부가 기능 구현하기 List의 부가 기능 구현하기 Pull Refresh Apple Developer Documentation developer.apple.com 화면을 아래로 끌어당겨 새로고침 하는 iOS의 가장 보편적인 새로고침 방식이다. struct PullToRefresh: View { @State private var ite chillog.page SwiftUI에서도 SearchBar를 제공하지만 List나 NavigationView 등 특정 View만 지원하므로 심미적인 목적이나 구현 스타일에 따라 새롭게 구성할 수 있어야 한다. struct SearchBar: View { @Binding var text:..
16. 코드 가독성 개선 코드 가독성 개선 UserService UserService > fetchUsers func fetchUsers(completion: @escaping([User]) -> Void) { var users = [User]() Firestore.firestore().collection("users").getDocuments { snapshot, _ in guard let documents = snapshot?.documents else { return } documents.forEach { document in guard let user = try? document.data(as: User.self) else { return } users.append(user) } completion(users) } } f..
15. 기능구현 #4 기능구현 #4 ExploreView ExploreView | UserService > fetchUser struct UserService { func fetchUser(withUid uid: String, completion: @escaping(User) -> Void) { Firestore.firestore().collection("users").document(uid).getDocument { snapshot, _ in guard let snapshot = snapshot else { return } guard let user = try? snapshot.data(as: User.self) else { return } completion(user) } } } UserService는 현재 fetchUs..
14. 버그 수정 #1 버그 수정 #1 Authentication, NavigationView 중복 표시 문제 Authentication | AuthViewModel > login before func login(withEmail email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { result, error in if let error = error { print("debug: failed to signin \(error.localizedDescription)") return } guard let user = result?.user else { return } self.userSession = user print(..
13. DB와 연결하기 #2 DB와 연결하기 #2 프로필 사진 표시하기 프로필 사진 표시하기 | Kingfisher import 하기 Kingfisher GitHub - onevcat/Kingfisher: A lightweight, pure-Swift library for downloading and caching images from the web. A lightweight, pure-Swift library for downloading and caching images from the web. - GitHub - onevcat/Kingfisher: A lightweight, pure-Swift library for downloading and caching images from the web. github.com URL을 사용해..