当前位置: 首页 > 面试题库 >

将结构保存到UserDefaults

乐健
2023-03-14
问题内容

我有一个要保存到UserDefaults的结构。这是我的结构

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

var songs: [Song] = [
    Song(title: "Title 1", artist "Artist 1"),
    Song(title: "Title 2", artist "Artist 2"),
    Song(title: "Title 3", artist "Artist 3"),
]

在另一个ViewController中,我有一个UIButton附加到此结构,例如

@IBAction func likeButtonPressed(_ sender: Any) {   
   songs.append(Song(title: songs[thisSong].title, artist: songs[thisSong].artist))
}

我想要它,以便每当用户单击该按钮时,它也将结构保存到UserDefaults,以便每当用户退出该应用程序然后将其打开时,它都会被保存。我该怎么做?


问题答案:

在Swift 4中,这几乎是微不足道的。只需将其标记为采用Codable协议,即可使其结构可编码:

struct Song:Codable {
    var title: String
    var artist: String
}

现在让我们从一些数据开始:

var songs: [Song] = [
    Song(title: "Title 1", artist: "Artist 1"),
    Song(title: "Title 2", artist: "Artist 2"),
    Song(title: "Title 3", artist: "Artist 3"),
]

这是将其添加到UserDefaults中的方法:

UserDefaults.standard.set(try? PropertyListEncoder().encode(songs), forKey:"songs")

以下是如何再次将其取回的方法:

if let data = UserDefaults.standard.value(forKey:"songs") as? Data {
    let songs2 = try? PropertyListDecoder().decode(Array<Song>.self, from: data)
}


 类似资料:
  • 问题内容: 通过从继承可以很容易地将Realm与类一起使用。但是我如何将包含几个字段的a保存到Swift中呢?例如 我知道文档中明确支持的类型。但是也许有一个不错的解决方法,或者甚至更好-来自领域的人可以写有关结构的未来计划。 问题答案: 我建议您使用协议,以实现所需的功能。 1)创建您的结构 2)创建您的领域对象 3)使用协议将我们的结构转换为Realm对象 4)使您的结构持久 有了这些工具,我

  • 问题内容: 我使用getJSON从我的网站请求JSON。效果很好,但是我需要将输出保存到另一个变量中,如下所示: 我需要将结果保存到其中,但似乎此语法不正确。有任何想法吗? 问题答案: 仅在响应后才能调用,无法获得价值。

  • 问题内容: import csv 我得到奇怪的输出!此代码有什么问题? 问题答案: 用途:

  • 问题内容: 我有一个熊猫DataFrame,我想上传到新的CSV文件。问题是在将文件传输到s3之前,我不想在本地保存文件。是否有像to_csv这样的方法可以将数据帧直接写入s3?我正在使用boto3。 这是我到目前为止的内容: 问题答案: 您可以使用:

  • 我使用下一个文件名路径将“Simple Data Writer”添加到我的测试计划中: 当我从UI而不是命令行运行脚本时,它可以完美地工作(脚本不会创建文件夹,并将结果保存到错误命名的文件中)。 任何想法如何使用简单数据编写器创建名称中具有日期的文件夹,以.jtl文件的名称创建时间? 我用的是windows 10。 谢谢你

  • 我最近在学习如何阅读