오늘 한 일 / 배운점
- 14:00 팀 회의 & 코드 리뷰
- 팀 과제 코드 작성
- 20:00 팀 회의 & 코드 리뷰
과제
- 팀 과제 코드 작성
느낀점
오늘은 UIImagePickerController로
이미지 선택해서 프로필 사진에 이미지 넣는 거랑
UserDefaults 사용해서 유저 프로필을 불러오고 변경하는 것 적용했다.
UserDefaults 관련해서 어떻게 짜야 할지 정리하는 데 오래 걸렸는데
-
UserDefaults에 담기는 시점
→ 데이터 변경 시점(프로필 편집 완료 누를 때, 동영상에 좋아요 누를 때 등)마다
UserDefaults에 담을지 아니면 특정한 이벤트(로그아웃 등)에서 한꺼번에 UserDefaults에 담을지 -
유저의 좋아요가 저장될 곳이 없음
→ 동영상에 좋아요 눌러서 따로 좋아요 누른 동영상을 보여주는 화면이 있는데
로그아웃해도 유지가 되려면 지금 있는 User 구조체에 새로운 프로퍼티를 추가해야 할지 -
UserDefault에 어떻게 담을지
→ ❶ 회원가입 후 유저의 계정 정보가 담기는userData: [User]
배열
❷ 현재 로그인 상태인 계정 정보가 담기는loginUser: User
배열
이렇게 두 가지가 있는데 UserDefaults로부터 userData를 끌고 와서
현재 loginUser와 일치하는(ID 값으로 매칭?) 유저의 값을 업데이트하고
변경된 userData를 UserDefault에 다시 담을지
내 화면에서만 쓰이는 것이 아니라 의논해야 하기도 했고
내가 생각하지 못한 부분도 있을 것 같아서 슬랙에서 다른 팀원분들께 물어봤는데
먼저 UserDefaults에 담기는 시점은 변경 값이 있을 때마다 그때그때 담아주기로 하였고
좋아요가 저장될 곳이 없는 문제는
struct Video: Equatable, Codable {
static func == (lhs: Video, rhs: Video) -> Bool {
return lhs.title == rhs.title && lhs.channelTitle == rhs.channelTitle
}
let title: String
let thumbnailURL: URL
let viewCount: String
let channelTitle: String
let tags: [String]
let publishedDate: String
let videoId: String
let description: String
var isLiked: Bool
}
struct User: Codable {
var Id: String
var password: String
var profileImage: Data?
var userName: String
var userEmail: String
var likedVideos: [Video]? // 새로 추가
}
위와 같이 User에 기존에 있던 Video 구조체 타입의 likedVideos라는 프로퍼티를 추가해서 해결하기로 했다
그리고 UserDefaults에 담는 방법은 나는 UserData만 UserDefaults에 들어가는 줄 알았는데
앱을 다시 실행시켜도 로그인 상태가 남으려면 loginUser도 들어가야 한다고 하여
데이터 변경 시점마다 두 개 다 UserDefaults로 저장하는 식으로 했다
아직은 로그인 화면이 구현되지 않아서 임시로 더미 데이터를 만들어서 내 코드에 적용해 나갔는데
역시나 하면서 계속 예기치 못한 부분에서 이상한 결과물이 나와서
로그 찍어가며 찾느라 한 시간은 날린 것 같다 ㅋㅋ..
그래도 일단 하루 남기고 아슬하게 내 담당 화면 기능 구현은 무사히 끝난 것 같아서 한시름 놓인다😮💨
이제 내일은 저 대충 짜놓은 UI 좀 다듬고
아슬아슬하게 붙어있는 오토 레이아웃… 잡아놓고
저녁에 다 같이 모여서 앱 전체적으로 UI 한번 더 다듬고
다 연결했을 때 문제만 없으면 끝이다! 내일도 파이팅!