繁体   English   中英

大模型表视图解决方案Swift

[英]Big model table view solution Swift

我有一个问题,您认为什么是解决我的问题的最佳方法。

情况是,我的模型很大,包含很多数据。 这些存储在数据库中并发送给客户端。 现在,我想以表视图的方式显示此数据。 显示数据不是问题,但是访问数据的最佳方法是。

我的问题是:在表视图单元格中处理大数据模型的聪明方法是什么?

因此,举一个例子,我有一个包含30个变量的模型。 现在,我有了一个带有表视图的页面视图控制器,在该页面的第一页上,我想显示变量1,2,5,6,7,9,10和下一页1,2,21,23,24 ,22(共100个对象),在页面上方有一个数字或字符串含义的小指示符。

所以我想到了Swift 4的解决方案

typealias listTypeObject = (name: String, minSize: Int, object: KeyPath<Any, Any>)

这里的问题是您不能转换密钥路径类型,因此它不能接受我的密钥路径。 因此,至少在这种状态下,这是行不通的。 如果有人知道解决方案,那就太好了!

另一种解决方案是手动创建每个列表,其中标题和内容分开。 这将使我花费很多代码行,我想这些代码行可能会少得多。

我希望有人可以向我展示一种更好的方法,或者只是告诉我最好的方法是手工。

非常感谢!

更新1:代码示例///这是页面列表

enum listTypes {
    case player
    case playerPoints
    case team
}

// I have a base model
class BaseModel {

    var id: Int = 0
    let updated: Date = Date()

    init(id: Int) {
        self.id = id
    }
}

// I have multiple final models like this but bigger
final class PlayerModel: BaseModel {
    var firstName: String = "John"
    var surname: String = "Doe"

    var pointsInFootball: Int = 60
    var pointsInBasketball: Int = 23

    init(id: Int, firstName: String, surname: String, pointsInFootball: Int, pointsInBasketball: Int) {
        super.init(id: id)

        self.firstName = firstName
        self.surname = surname

        self.pointsInFootball = pointsInFootball
        self.pointsInBasketball = pointsInBasketball
    }
}

final class TeamModel: BaseModel {
    var name: String = "TeamTest"
}

// Lets create the example
var dataArray: [BaseModel] = []

// Add some test objects to the array
for i in 0..<10 {
    let object = PlayerModel(id: i, firstName: "John\(i)", surname: "Doe\(i)", pointsInFootball: 10 * i, pointsInBasketball: 5 * i)
    dataArray.append(object)
}

// So now in the list I would like to say what is accessible for the table view
// listTypes.player = PlayerModel: firstName - surname - age
// listTypes.playerPoints = PlayerModel: firstName - pointsInFootball - pointsInBasketball - pointsInSkiing
// But list type team should be
// listTypes.team = TeamModel: name

据我了解,我认为您应该使用枚举。 通过使用枚举数组,它可以隔离要呈现的变量,并且您无需创建唯一的tableViews即可完成此操作。 您只需将一个数组传递给tableView委托/数据功能。 没有代码示例/更多信息,这就是我可以推断的全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM