gpt4 book ai didi

ios - Swift 将不同类型组合成一个数组来为 UITableView 显示数据

转载 作者:可可西里 更新时间:2023-11-01 00:28:22 25 4
gpt4 key购买 nike

我有 tableview,我需要在其中显示几个部分。您应该将此表想象成您歌曲的播放列表。在顶部的第一部分,我需要显示一个带有按钮的单元格,它将向播放列表添加更多歌曲,而 tableview 的其他部分是音乐类别(如流行、摇滚等)的标题。这些部分中的每一个都包含作为歌曲名称的单元格。

我有一组这样命名的歌曲:var songsGroups = [SongGroup]。这实际上是我的数据源。

SongGroup 包含几个属性:

var categoryName: String
var songs: [Songs]

但问题出现在下一层。我每次都需要检查 indexPath.section 并这样做:

if indexPath.section == 0 {
// this is a section for ADD NEW SONG BUTTON cell no need in header title as there is no data repression only static text on the cell.
} else {
var musicCategoryName = songsGroups[indexPath.seciton - 1]. categoryName
headerTitle.title = musicCategoryName
}

如您所见,通过添加这个很酷的 -1 神奇数字,我的代码变得神奇了。我重播一点都不喜欢。

作为一个确定的想法,我可以尝试将我的 ADD NEW SONG BUTTON 部分(通过添加一些额外的对象)与 songsGroups 数组结合起来,并为此目的创建 NSArray。就像你记得的 Objective-C 一样。那么我的数据源数组将如下所示:

some NSArray = ["empty data for first cell", songsGroups[0], songsGroups[1]... etc]

因此无需检查任何部分,我们可以信任我们的数组来构建所有内容,即使我将添加更多空数据单元格,我也无需通过 if block 处理我的代码并添加大量神奇数字.

但我在这里看到的问题是我们没有使用明确类型的数组,这让人很沮丧。

所以也许你知道如何解决我的问题的更漂亮的解决方案。

最佳答案

你可以引入一个辅助枚举:

enum Section {
case empty
case songCategory(categoryName: String, songs: [String])
}

您的数据源将如下所示:

let datasource: [Section] = [.empty, .songCategory(categoryName: "Category1", songs: ["Song 1", "Song2"])]

所以现在你可以使用pattern matching填充表格 View :

let section = datasource[indexPath.section]
if case let .songCategory(categoryName, songs) = section {
headerTitle.title = categoryName
} else {
// this is a section for ADD NEW SONG BUTTON cell no need in header title as there is no data repression only static text on the cell.
}

关于ios - Swift 将不同类型组合成一个数组来为 UITableView 显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54737399/

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