Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Swift中过滤对象以仅显示其值?_Arrays_Swift_Object_Filter_Model - Fatal编程技术网

Arrays 如何在Swift中过滤对象以仅显示其值?

Arrays 如何在Swift中过滤对象以仅显示其值?,arrays,swift,object,filter,model,Arrays,Swift,Object,Filter,Model,我创建了一个模型来存储歌曲的数据。在视图控制器上,我只想显示特定艺术家的歌曲,而不是显示数据库中存储的所有歌曲 我尝试过使用map和filter,但没有完全理解,还有其他方法可以尝试吗 let selectedArtist = artists[indexPath.row] 上面的代码是从didSelect方法中选择的艺术家,用于选择他们想要显示歌曲的艺术家。它具有模型歌曲的类型,其中包含歌曲、艺术家、专辑 当点击所选艺术家时,我希望模型被过滤,只显示所选艺术家的歌曲。这将存储在与模型匹配的数组

我创建了一个模型来存储歌曲的数据。在视图控制器上,我只想显示特定艺术家的歌曲,而不是显示数据库中存储的所有歌曲


我尝试过使用map和filter,但没有完全理解,还有其他方法可以尝试吗

let selectedArtist = artists[indexPath.row]
上面的代码是从didSelect方法中选择的艺术家,用于选择他们想要显示歌曲的艺术家。它具有模型歌曲的类型,其中包含歌曲、艺术家、专辑


当点击所选艺术家时,我希望模型被过滤,只显示所选艺术家的歌曲。这将存储在与模型匹配的数组中,或存储在名为selectedSongs的数组中,当过滤匹配艺术家名称时,将其添加到数组中。

假设有两种类型,歌曲和艺术家

 struct Song {
    var title: String
    var artist: Artist
    var album: String
}

struct Artist {
    var name: String
}
然后在视图控制器中,可以有一个数组filteredSongs和一个执行过滤的函数

class ExampleViewController {
    var songs = [Song]()
    var filteredSongs: [Song]?

    func filterSongs(byArtist artist: Artist) {
        filteredSongs = songs.filter { song in
            song.artist.name == artist.name
        }
    }
    //...
}
这样你就可以通过做

let selectedArtist = artists[indexPath.row]
filterSongs(byArtist: selectedArtist)

“我试过使用map和filter,但没有完全理解它,”你可能应该试着理解它。总之,1。您当前的代码有什么问题?2.你能显示歌曲类型吗?3.为什么选择了Artista
Song
?应该是
Artist
还是
String
呢?谢谢你的帮助。目前我只有一种类型,那就是歌曲,它包含了一切。“那还能用吗?”布莱克斯:当然可以。假设artist是一个字符串,您可以在我的示例中更改类型,并用artist替换artist.name非常感谢您的工作,尽管我遇到了一个问题。加载视图控制器时,我需要显示所有艺术家的姓名,但我有一位艺术家的几首歌曲,因此需要过滤艺术家姓名,使其只显示一次。请问我怎么做?