首页 > 解决方案 > 如何根据标签名称检查多个案例?

问题描述

我有一个视图控制器,其中包含多个类别的集合视图。获取不同的数据和详细信息,包括与该类别相关的照片。我不知道如何对此进行 switch 语句的案例。一遍又一遍地编写相同的代码似乎不是一个好主意。

我至少要覆盖 14 个不同的单元格...

这是我得到的

// Fetch posts based on trend name/hashtag
func fetchPosts() {
    if trendName == "Bike Shorts" {
        print("Fetching posts with the hashtag bikeshorts")
        HASHTAG_POST_REF.child("bikeshorts").observe(.childAdded) { (snapshot) in
            let postId = snapshot.key
            Database.fetchPost(with: postId, completion: { (post) in
                self.posts.append(post)
                self.collectionView?.reloadData()
            })
        }
    } else {
        if trendName == "Animal Prints" {
            self.trendDetails = "This is the label for animal prints"
            HASHTAG_POST_REF.child("animalprints").observe(.childAdded) { (snapshot) in
                let postId = snapshot.key
                Database.fetchPost(with: postId, completion: { (post) in
                    self.posts.append(post)
                    self.collectionView?.reloadData()
                })
            }
        }
    } else {
        if self.trendName == "Bermunda Shorts" {
            self.trendDetails = "This is the label for bermunda shorts"
            HASHTAG_POST_REF.child("bermundashorts").observe(.childAdded) { (snapshot) in
                let postId = snapshot.key
                Database.fetchPost(with: postId, completion: { (post) in
                    self.posts.append(post)
                    self.collectionView?.reloadData()
                })
            }
        }
    }
}

标签: swiftfirebaseif-statementswitch-statementrefactoring

解决方案


我会使用 enum 来管理您的类别这是一些如何进行的代码

enum Trend: String {

    case bike = "bikeshorts"
    case animal = "animalprints"

    static let allValues: [Trend] = [bike, animals]

    var name: String {
        switch self {
        case .bike: return "Bike Shorts"
        case .animal: return "Animal Prints"
        }
    }

}

var trend: Trend = .bike

func fetchPosts() {

    HASHTAG_POST_REF.child(trend.rawValue).observe(.childAdded) { (snapshot) in

        let postId = snapshot.key
        Database.fetchPost(with: postId, completion: { (post) in
            self.posts.append(post)
            self.collectionView?.reloadData()
        })


    }

}

您可以获取趋势变量 didSet 以调用 fetch func 或通过 allValues 进行迭代


推荐阅读