TabBarController
TabBar
enum으로 구현CaseIterable
을 채택함으로 열거형으로 정의된 프로퍼티들을 for문으로 접근할 수 있다MainViewController
UITableView
로 구성된다UICollectionView
StoryTableViewCell
안의 StoryCollectionViewCell
contentView
에 넣어야한다addSubView
했을 때, 가로 스크롤이 안된다FeedTableViewCell
ExploreViewController
UISearchController
와 UICollectionView
로 구성refreshControl
을 통해 새로고침하는 UI 구현AccountViewController
PHPickerViewController
를 사용하여 이미지를 선택할 수 있다(이미지 1장만 가능)UploadFeedViewController
leftBarButton
은 dismiss, rightBarButton
은 공유imagePickerView
numberOfSelectedImageLabel
PHPickerViewController
를 사용하여 이미지를 선택할 수 있다(이미지 여러장 가능)descriptionTextView
textView
의 placeholder 기능 구현optionsTableView
Feed
struct Feed: Codable {
let id: String
let user: User
let location: String
let imageURLString: [String]
let likeUser: [User]
let description: String
let createDate: Date
var imageURL: [URL?] {
imageURLString.map { URL(string: $0) }
}
var date: String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M월 d일"
dateFormatter.locale = Locale(identifier: "ko_KR")
return dateFormatter.string(from: createDate)
}
}
User
struct User: Codable, Equatable {
static func == (lhs: User, rhs: User) -> Bool {
lhs.id == rhs.id
}
let id: String
let name: String
let nickName: String
let profileImageURLString: String
let feed: [String]
let follower: [String]
let following: [String]
let like: [String]
var profileImageURL: URL? { URL(string: profileImageURLString) }
}