생성일: 2022년 2월 19일 오후 9:57
사용자가 다른 사용자의 post의 댓글(comment)를 남기는 경우, follow를 하는경우, 좋아요를 누르는 경우 상대 사용자에게 Notification(알림)을 테이블뷰에 정리해서 보여주도록 하자
이를 위해 Notification Model을 생성한다.
import Firebase
enum NotificationType: Int {
case like
case follow
case comment
var notificationMessage: String {
switch self {
case .like: return " liked your post."
case .follow: return " started following you."
case .comment: return " commented on your post."
}
}
}
struct Notification {
let uid: String
var postImageUrl: String?
var postId: String?
let timestamp: Timestamp
let type: NotificationType
let id: String
let userProfileImageUrl: String
let username: String
init(dictionary: [String: Any]) {
self.timestamp = dictionary["timestamp"] as? Timestamp ?? Timestamp(date: Date())
self.id = dictionary["id"] as? String ?? ""
self.uid = dictionary["uid"] as? String ?? ""
self.postId = dictionary["postId"] as? String ?? ""
self.postImageUrl = dictionary["postImageUrl"] as? String ?? ""
self.type = NotificationType(rawValue: dictionary["type"] as? Int ?? 0) ?? .like
self.userProfileImageUrl = dictionary["userProfileImageUrl"] as? String ?? ""
self.username = dictionary["username"] as? String ?? ""
}
}
댓글, follow, 좋아요 ← 이렇게 3가지 종류의 Notification을 구현하고자 하는 데 이때, Notification의 Type(종류)를 쉽게 정의할 수 있도록 사용할 수 있는 자료형이 바로 enum이다.
enum NotificationType: Int {
case like
case follow
case comment
var notificationMessage: String {
switch self {
case .like: return " liked your post."
case .follow: return " started following you."
case .comment: return " commented on your post."
}
}
}
위와 같이 Int형의 enum을 생성하여 (대부분의 enum 은 Int로 사용) 3가지 case를 생성한다.
Swift에서는 enum 안에 위와같이 다른 변수를 추가 할 수 있다.
이번 사례에서는 notificationMessage 라는 문자열을 멤버변수로 가지도록 하였다. 이를 통해 각 case 별로 notificationMessage가 자동으로 알맞게 설정되는데(switch문 활용), 이 문자열을 이용해 View파일에서 간편하게 notification type에 맞는 문장을 화면에 보이도록 할 수 있다.