簡體   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