enum 을 사용하여 Notification 종류 정의

이세진·2022년 6월 24일
0

iOS

목록 보기
31/46
post-custom-banner

생성일: 2022년 2월 19일 오후 9:57

사용자가 다른 사용자의 post의 댓글(comment)를 남기는 경우, follow를 하는경우, 좋아요를 누르는 경우 상대 사용자에게 Notification(알림)을 테이블뷰에 정리해서 보여주도록 하자

이를 위해 Notification Model을 생성한다.

Notification.swit

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에 맞는 문장을 화면에 보이도록 할 수 있다.

profile
나중은 결코 오지 않는다.
post-custom-banner

0개의 댓글