相关疑难解决方法(0)

如何在swift中使用NSCoder编码枚举?

背景

我正在尝试使用NSCoding协议对String样式的枚举进行编码,但是我遇到了从String转换回来的错误.

解码和编码时出现以下错误:

字符串不可转换为Stage

额外参数ForKey:在电话中

    enum Stage : String
    {
        case DisplayAll    = "Display All"
        case HideQuarter   = "Hide Quarter"
        case HideHalf      = "Hide Half"
        case HideTwoThirds = "Hide Two Thirds"
        case HideAll       = "Hide All"
    }

    class AppState : NSCoding, NSObject
    {
        var idx   = 0
        var stage = Stage.DisplayAll

        override init() {}

        required init(coder aDecoder: NSCoder) {
            self.idx   = aDecoder.decodeIntegerForKey( "idx"   )
            self.stage = aDecoder.decodeObjectForKey(  "stage" ) as String    // ERROR
        }

        func encodeWithCoder(aCoder: NSCoder) {
            aCoder.encodeInteger( …
Run Code Online (Sandbox Code Playgroud)

enums persistence nscoder swift

63
推荐指数
3
解决办法
2万
查看次数

将Struct保存到UserDefaults

我有一个结构,我想保存到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"),
]
Run Code Online (Sandbox Code Playgroud)

在另一个ViewController中,我有一个附加到这个结构的UIButton

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

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

struct nsuserdefaults ios swift

50
推荐指数
4
解决办法
2万
查看次数

标签 统计

swift ×2

enums ×1

ios ×1

nscoder ×1

nsuserdefaults ×1

persistence ×1

struct ×1