gpt4 book ai didi

swift - 在 Swift 中发布 Feed 数据建模

转载 作者:行者123 更新时间:2023-11-30 10:35:59 30 4
gpt4 key购买 nike

这个问题是关于当您有多种类型的帖子时存储新闻提要(例如 Twitter/Facebook/其他)的帖子数组的最佳方式。为了让事情变得更简单,让我们考虑这样一种情况,当你有两种类型的帖子(每种都有不同的单元用户界面):一个“大”帖子(带有照片、文本......)和一个“小”帖子,其服务更像通知。如果你想在 UI 元素(collectionView/tableView)中呈现两种类型的帖子,那么将它们都放在“posts”数组中很方便,所以我们可以这样做:

    protocol Post { 
var postID : String {get set}
var creatorID : String {get set}
var postType : PostType {get set} //<--- Custom enum that just has ".big" and ".small" in this case
//some other general things for the post may go here
}

struct BigPost : Post {
//All the post vars here
var postID : String
var creatorID : String
var postType : PostType = .big

//Some other things for this post type (just examples, they are not important)
var imageUrl : String
var countComments : Int
//etc
}

struct SmallPost : Post {
//All the post vars here
var postID : String
var creatorID : String
var postType : PostType = .small

//Some other things for this post type (just examples, they are not important)
var text : String
//etc
}

如果你这样做,你实际上可以做到这一点

   var posts : [Post] = [BigPost(), SmallPost(), SmallPost(), BigPost()]

它可以工作,您只需使用“postType”变量将每个帖子类型的相应单元格出队即可。我的问题是,这是一个方法吗?因为我想过实现 diffing(witch,例如 deepDiff,太棒了 https://github.com/onmyway133/DeepDiff ),所以当我们有很多帖子时,collectionView/tableView中的更新是高效的,但是,我该怎么做呢?因为我无法使我的 Post 协议(protocol)符合其他一些“Diffable”协议(protocol),因为这样我就无法声明类型为 [Post] 的数组,即使我同时创建了smallPost和bigPosts,也符合该“Diffable”协议(protocol),我“post”数组中的元素仍然被编译器视为“Post”,所以我无法执行任何“diff”。

也许一些具有多态性的策略更好?你有什么想法?

最佳答案

看看类型转换 - https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html

您可以使smallPost和bigPost符合“Diffable”,创建数组

var posts : [Diffable] = [BigPost(), SmallPost(), SmallPost(), BigPost()]

然后检查它们的类型:

if let post = posts[0] as? SmallPost {
// do something
}

if let post = posts[0] as? BigPost {
// do something
}

并且您不需要额外的属性(var postType : PostType {get set})

关于swift - 在 Swift 中发布 Feed 数据建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018902/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com