相关疑难解决方法(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万
查看次数

- [_ SwiftValue encodeWithCoder:]:发送到实例的无法识别的选择器

尝试使用NSCoder时出错

Player.swift:

class Player: NSObject, NSCoding {

    private var _playerName: String!
    private var _playerScore: Int!
    private var _playerColor: PlayerColor! //PlayerColor is an enum

    var playerName: String {
        get {
            return _playerName
        }
        set {
            _playerName = newValue
        }
    }

    var playerScore: Int {
        get {
            return _playerScore
        }
        set {
            _playerScore = newValue
        }
    }

    var playerColor: PlayerColor {
        get {
            return _playerColor
        }
        set {
            _playerColor = newValue
        }
    }

    init(playerName: String, playerScore: Int, playerColor: PlayerColor) {

        _playerName = …
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults nscoder ios swift swift3

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

nscoder ×2

swift ×2

enums ×1

ios ×1

nsuserdefaults ×1

persistence ×1

swift3 ×1