我創建了一個應用程序,用於向用戶顯示最新和最熱門的國家/地區歌曲。我使用Firebase數據庫來發送和接收歌曲信息。這是在Xcode中使用Swift和UIKit。如何使用UserDefaults保存包含創建類的信息的數組
我創建了一個名爲Song的類,用於處理從Firebase獲取的所有信息。那個班級在下面。
import Foundation
import UIKit
class Song {
//private var _imageURL: String!
private var _videoURL: NSMutableURLRequest!
private var _songTitle: String!
private var _artistName: String!
private var _cellNum: Int!
private var _lastNum: Int!
private var _spotifyLink: String!
private var _itunesLink: String!
private var _lyrics: String!
private var _saved: Bool!
// var imageURL: String{
// return _imageURL
// }
var videoURL: NSMutableURLRequest{
return _videoURL
}
var songTitle: String{
return _songTitle
}
var artistName: String{
return _artistName
}
var cellNum: Int{
return _cellNum
}
var lastNum: Int{
return _lastNum
}
var spotifyLink: String{
return _spotifyLink
}
var itunesLink: String{
return _itunesLink
}
var lyrics: String{
return _lyrics
}
var saved: Bool{
get{
return _saved
}
set{
_saved = newValue
}
}
init(videoURL: NSMutableURLRequest, songTitle: String, artistName: String, cellNum: Int, lastNum: Int, spotifyLink: String, itunesLink: String, lyrics: String, saved: Bool) {
//_imageURL = imageURL
_videoURL = videoURL
_songTitle = songTitle
_artistName = artistName
_cellNum = cellNum
_lastNum = lastNum
_spotifyLink = spotifyLink
_itunesLink = itunesLink
_lyrics = lyrics
_saved = saved
}
}
在我的一個swift文件中,我初始化了一個新的Song類型數組來保存用戶保存的信息。
var savedSongs = [Song]()
有故事板的一個內一個按鈕,如果用戶點擊它,它增加了保存的歌曲數組,當用戶進入到SavedVC故事板,所有保存在該項目的數組顯示給用戶。點擊按鈕的功能如下所示。
@IBAction func save(_ sender: Any) {
if(saveBtn.currentTitle == "Save"){
song.saved = true
let p1 = song
savedSongs.append(p1)
//UserDefaults save here
saveBtn.setTitle("Unsave", for: .normal)
}
else if(saveBtn.currentTitle == "Unsave"){
if(savedSongs.count != 0){
//let items = (savedSongs.count) - 1
let title = song.songTitle
for save in 0...savedSongs.count-1{
let removeSave = savedSongs[save]
let checkTitle = removeSave.songTitle
if(checkTitle == title){
song.saved = false
savedSongs.remove(at: save)
//UserDefaults save here
saveBtn.setTitle("Save", for: .normal)
return
}
}
}
}
}
顯然,用戶有一個選項來保存,之後,他可以重新點擊按鈕來取消保存歌曲。在代碼中,對象
song.(attribute)
被髮送並且是包含來自Song類的信息的所選單元的表示。因爲我現在有我的代碼,所以一切正常。問題是,當我離開應用程序時,數組中的內容不會保留。我曾嘗試UserDefaults,但我不知道如何與我擁有的數組做。
我想將數組保存爲用戶默認值,每次在上面的保存IBAction中單擊按鈕。
私人後盾變量得到常數在斯威夫特可笑。只需使用'let'關鍵字即可'讓songTitle:String'。永遠不要將變量聲明爲使用(非可選)'init'方法初始化的隱式unwrapped選項。 – vadian