Mat*_*der 3 arrays uitableview nsarray ios swift
我有 tableview,我需要在其中显示几个部分。你应该把这张表想象成你的歌曲的播放列表。在顶部的第一部分中,我需要显示一个带有按钮的单元格,它将向播放列表添加更多歌曲,tableview 的其他部分是音乐类别的标题(如流行、摇滚等)。这些部分中的每一个都包含作为歌曲名称的单元格。
我的歌曲叫一个这样的数组:var songsGroups = [SongGroup]。这实际上是我的数据源。
SongGroup 包含几个属性:
var categoryName: String
var songs: [Songs]
Run Code Online (Sandbox Code Playgroud)
但问题出现在下一个层面。我每次都需要检查 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
}
Run Code Online (Sandbox Code Playgroud)
正如你看到的,通过添加这个很酷的-1神奇数字,我的代码变得神奇了。我重播根本不喜欢。
作为一个肯定的想法,我可以尝试将我的 ADD NEW SONG BUTTON 部分(通过添加一些额外的对象)与songsGroups数组结合起来,并为此目的创建 NSArray。就像你记得的那样在 Objective-C 中。那么我的数据源数组将如下所示:
some NSArray = ["empty data for first cell", songsGroups[0], songsGroups[1]... etc]
Run Code Online (Sandbox Code Playgroud)
因此,无需检查我们可以信任我们的数组来构建所有内容的任何部分,即使我将添加更多空数据单元,我也无需通过 if 块和添加大量神奇数字来处理我的代码。
但是我在这里看到的问题是我们不使用显式类型的数组,这很令人不安。
所以也许你知道如何解决我的问题的更漂亮的解决方案。
你可以引入一个辅助枚举:
enum Section {
case empty
case songCategory(categoryName: String, songs: [String])
}
Run Code Online (Sandbox Code Playgroud)
您的数据源将如下所示:
let datasource: [Section] = [.empty, .songCategory(categoryName: "Category1", songs: ["Song 1", "Song2"])]
Run Code Online (Sandbox Code Playgroud)
所以现在你可以使用模式匹配来填充表格视图:
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.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |