如何将包含关联值的Swift枚举保存到NSUserDefault?

时间:2017-04-07 03:49:50

标签: ios swift enums nsuserdefaults nscoding

问题是什么

我正在尝试将每个Enum案例的 Swift Enum 的实例保存到 NSUserDefault 。之所以这样,是因为相关的值引用了一些需要在重新启动应用程序时重用的对象,这意味着被引用的对象是应用程序启动时需要了解的自定义对象

实施例

class ABCModeController {

static var sharedInstance = ABCModeController()

enum ABCMode {

    case On([ABCMachine], Int?, UIColor?)
    case Off([ABCMachine])
    case Toggle([ABCMachine], Int?, UIColor?)

}

var customMode1:ABCMode?
var customMode2:ABCMode?
var customMode3:ABCMode?

}

预期的行为是什么

从上面的示例中,Swift Enum包含在单个类中,预计每个ABCMode实例(customMode1,customMode2,customMode3)都可以保存到userDefault中。得到“didSet”它的价值。当应用程序重新启动时,userDefault将恢复此单例类中这些ABCMode的每个实例。

尝试过什么&潜在的解决方案

  • Swift Enum 可以将 rawValue 设置为自身,而我找到了设置 作为Int和String的rawValue还没有解决问题,我想知道我们是否可以将任何对象设置为Enum的 rawValue ?如果这可以是一个解决方案,如何使rawValue包含每个Enum案例的相关值?
  • 我想知道 Swift Enum 是否可以转换为 NSData 以保存到userDefault?
  • 正在使用 NSCoding 更好的解决方案吗?

要求什么

  • 如何将包含关联值 Swift Enum 保存到 的 NSUserDefault
  • 是否有更好的解决方案来解决上述问题?

什么系统&正在使用的工具

  • Xcode 8.3
  • Swift 3
  • iOS 9.0&上述

非常感谢。

0 个答案:

没有答案