[SwiftUI 100天] Bookworm-part6 用 @FetchRequest 构建列表

2020/4/22 23:22:01

本文主要是介绍[SwiftUI 100天] Bookworm-part6 用 @FetchRequest 构建列表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

译自 www.hackingwithswift.com/books/ios-s…
更多内容,欢迎关注公众号 「Swift花园」
喜欢文章?不如来个 🔺💛➕三连?关注专栏,关注我 🚀🚀🚀

用 @FetchRequest 构建列表

目前,我们的ContentView里有一个 fetch 请求属性:

@FetchRequest(entity: Book.entity(), sortDescriptors: []) var books: FetchedResults<Book>复制代码

我们在body里的一个简单的文本视图用到它:

Text("Count: \(books.count)")复制代码

为了让这个界面更生动,我们需要把文本视图替换成一个显示所有图书的列表,加上它们的评级和作者信息。

我们可以用上刚刚创建的星级评价控件,不过尝试一点新玩意也不错。尽管RatingView控件已经适用于任何工程,我们可以再创建一个新的EmojiRatingView,专门为这个项目显示评价信息。它实现的功能是,根据不同的评价显示五种不同的 emoji 表情,这个例子对于展示 SwiftUI 里的视图如何组合非常棒 —— 以这种方式,从你的视图中拉取一部分是如何简单。

创建一个叫 “EmojiRatingView” 的新 SwiftUI 视图,代码如下:

struct EmojiRatingView: View {
    let rating: Int16

    var body: some View {
        switch rating {
        case 1:
            return Text("1️⃣")
        case 2:
            return Text("2️⃣")
        case 3:
            return Text("3️⃣")
        case 4:
            return Text("4️⃣")
        default:
            return Text("1️⃣")
        }
    }
}

struct EmojiRatingView_Previews: PreviewProvider {
    static var previews: some View {
        EmojiRatingView(rating: 3)
    }
}复制代码

注意,对于等级我使用了Int16,这是为了和 Core Data 的交互更容易。整个代码非常简单。

现在,回到ContentView,把原来的文本视图替换成一个列表,使用ForEach遍历books来创建。对于ForEachidentifier参数,我们传入\.self,也就是整个对象作为 identifier。

你瞧,Core Data 实体里的所有属性都是 optional 的,因此我们需要大量地使用空合操作符。稍后我们会寻找替代方案,眼下我们先将就使用这些??符号。

在列表内部,我们将使用一个NavigationLink,它会导向一个细节视图。而NavigationLink内部,我们会用上新的EmojiRatingView,加上书名和作者。把文本视图替换成下面的代码:

List {
    ForEach(books, id: \.self) { book in
        NavigationLink(destination: Text(book.title ?? "Unknown Title")) {
            EmojiRatingView(rating: book.rating)
                .font(.largeTitle)

            VStack(alignment: .leading) {
                Text(book.title ?? "Unknown Title")
                    .font(.headline)
                Text(book.author ?? "Unknown Author")
                    .foregroundColor(.secondary)
            }
        }
    }
}复制代码

我们稍后还会回到这里,现在让我们构建细节视图...


我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~





这篇关于[SwiftUI 100天] Bookworm-part6 用 @FetchRequest 构建列表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程