- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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/
所以我正在创建一个附加对象的数组。我的问题是我想添加对象而不删除原始对象。一旦我附加了对象,我就会看到它们。但是当我添加新对象时,旧对象消失了,并被旧对象取代。如何通过 NSUserDefaults
Swift 3.0 中 UserDefaults() 和 UserDefaults.standard 有区别吗? 最佳答案 UserDefaults - 为您提供一个新对象,每个对象都分配不同的内存并
当我打印 .text 属性 print(inputField.text!) 时,它会打印 0.0925,这就是我输入的内容。但是当我将其传递给 UserDefault 或变量时, defaults.s
我创建了一个虚拟 IOS 应用程序来很好地解释我的问题。让我分享所有细节: 这个虚拟 IOS 应用程序中有 2 个页面:LoginPageViewController.swift 和 Homepage
我的对象符合新的 Swift 4 Codeable协议(protocol)。如何在 UserDefaults 中保存这些对象的数组? struct MyObject: Codeable { v
是什么导致这种情况发生?此错误的两个实例出现在我的 View Controller 的最底部,其中行以“userDefaults”开头。这是我的代码 import UIKit class Second
我正在呈现一个带有一些文本字段和按钮的 View ,用户可以在该文本字段中输入一些数据,当用户单击保存按钮时,该数据将保存在 NSUserdefaults 中并显示在另一个 View 上,但它不起作用
将复杂数据存储到 UserDefaults 时,出现异常。代码如下。 写入变量c时发生异常。 struct MyData : Codable { var v1 : Int var v2 : I
我有一个 UIProgress View ,需要 60 秒才能穿过屏幕,但是我如何使它的位置而不是设置时间“var秒= 60”,我有 UserDefault 字符串作为时间? (并未包含所有代码。)
我有应用程序+扩展,并且我制作了这样的共享存储 extension UserDefaults { static let suiteName = "group.myApp" static
我试图将自定义类数组保存到 UserDefaults,但它不起作用。我在 if let 上没有得到任何返回。我在网上到处找。我使用的是 Swift 4.2 extension UserDefaults
我的要求是用户必须导航上次访问的页面,因此 我试图将UIViewController数组保存到NSUserDefault,但应用程序每次都会崩溃 let array = self.navigation
我正在我的应用中实现备份功能。因此,我正在备份所有 UserDefaults 都保存在以下路径的 UserDefaults 源文件: .../Library/Preferences/.plist 当用
我希望将精心制作的多级自定义对象保存到 NSUserDefaults 中。我的自定义类设置如下: 讲师 @property (strong, nonatomic) NSString *instruct
我正在手动将数据输入结构。但是该结构不保存数据。我尝试使用 userdefaults 但它不起作用。如果数据位于结构 bad 中,我希望数据始终显示在标签 benCarson 上。 View Cont
我想我正在尝试制作的 iOS 应用程序的某些部分存在概念问题。基本上,在此应用程序中,您将一个项目添加到列表中,该项目将在 1 小时后过期。所以你有一个小时的时间来使用它。但是,我希望在应用程序崩溃或
因此,当用户首次打开我的应用程序时,他们将看到一个带有按钮的 View ,用于继续登录或注册。在我的登录 View 中,我有一个按钮处理程序(通过操作附加),当用户按下登录按钮时调用它。尽管我使用 U
将计数用户默认值重置为来自扩展方法之外的函数。在这种情况下,它的功能很简单。现在代码从 0 开始,除非我可以使用 func 来阻止代码上升。 extension UIViewController {
我目前遇到的一个问题是,如果我离开应用程序并返回,recordData 值不会保持保存状态。如果我在不关闭应用程序的情况下再次玩游戏,它仍会保存。 如果我关闭并重新打开应用程序,ant new sco
在 Swift 中创建了一个像这样的 Array var MyArray: [String:[String:[Int]]] = [ "xx": ["x1": [1, 2, 3], "x2":
我是一名优秀的程序员,十分优秀!