gpt4 book ai didi

arrays - 使用结构、数组和 UserDefaults (Swift)

转载 作者:可可西里 更新时间:2023-11-01 00:56:15 26 4
gpt4 key购买 nike

我正在使用 swift 创建一个 iOS 应用程序,用户可以在其中播放音乐。我在 .swift 文件中创建了应用提供的歌曲结构和数组。

        struct Song {
var title: String
var artist: String
var lyrics: String

}

var songs: [Song] = [
Song(title: Song One Title", artist: "Song One Artist", lyrics: ""),
Song(title: Song Two Title", artist: "Song Two Artist", lyrics: "Song Two Lyrics"),
Song(title: Song Three Title", artist: "Song Three Artist", lyrics: ""),

];

数组 songs 填充了一个 UICollectionViewController 并且效果很好!但是,我希望用户能够通过按下按钮来喜欢一首歌。然后他们喜欢的所有歌曲都会在另一个 UICollectionViewController 中。到目前为止,我一直在尝试多种方案,但所有方案都失败了。所以我决定来到这个社区寻求帮助。

这是我的一个想法。我会在结构 Song 中创建另一个名为“liked”的变量,它将是一个 bool 值。

        struct Song {
var title: String
var artist: String
var lyrics: String
var liked: Bool
}

var songs: [Song] = [
Song(title: Song One Title", artist: "Song One Artist", lyrics: "", liked: false),
Song(title: Song Two Title", artist: "Song Two Artist", lyrics: "Song Two Lyrics", liked: false),
Song(title: Song Three Title", artist: "Song Three Artist", lyrics: "", liked: false),

];

我想知道如何才能将用户喜欢的歌曲的 indexPath 的 bool 值从 false 更改为 true?我还希望将它保存到 UserDefaults,这样下次用户访问该应用程序时,这些歌曲仍然会喜欢以前的歌曲。最后,我想在 UICollectionViewController 中显示 liked bool 值等于 true 的所有歌曲。

如果您有任何想法,如果您能分享它们就太好了!非常感谢您的帮助!

最佳答案

我可以想到一些方法

保存喜欢的歌曲

您可以将所有喜欢的Song 对象保存到UserDefaults 中。为此,您需要添加一个方法,将 Song 结构转换为 [String: Any],即属性列表。然后,您可以将此 [String: Any] 保存到 UserDefaults。这样做的缺点是当用户删除歌曲时,您必须从 UserDefaults 中删除它。很难同步它。

保存所有歌曲,过滤出喜欢的歌曲

不是像在第一种方法中那样说出所有歌曲,而是保存所有歌曲并像您尝试的那样添加一个 liked 属性。显然,您还需要一种将结构转换为 [String: Any] 的方法。

存储喜欢歌曲的索引

存储整个 Song 结构可能有点矫枉过正。如果歌曲将保持相同的顺序并且不会插入或删除更多歌曲,那么您可以只存储喜欢的歌曲的索引。如果用户喜欢第一和第三首歌曲,则将数组:[1, 3] 存储到 UserDefualts 中。

核心数据

我认为这是 4 种方法中最好的方法。不过设置核心数据堆栈可能更困难。有很多教程讨论如何使用 Core Data。您将使用 liked 属性在 Core Data 中存储 Song 实体。

关于arrays - 使用结构、数组和 UserDefaults (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579085/

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