Guest User

Untitled

a guest
Jan 20th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. enum UserState {
  2. case LoggedIn(LoggedInState)
  3. case LoggedOut(LoggedOutState)
  4. }
  5.  
  6. enum LoggedInState: String {
  7. case playing
  8. case paused
  9. case stopped
  10. }
  11.  
  12. enum LoggedOutState: String {
  13. case Unregistered
  14. case Registered
  15. }
  16.  
  17. extension UserState: Codable {
  18. enum CodingKeys: String, CodingKey {
  19. case loggedIn
  20. case loggedOut
  21. }
  22.  
  23. enum CodingError: Error {
  24. case decoding(String)
  25.  
  26. }
  27.  
  28. init(from decoder: Decoder) throws {
  29. let values = try decoder.container(keyedBy: CodingKeys.self)
  30. if let loggedIn = try? values.decode(String.self, forKey: .loggedIn) {
  31. self = .LoggedIn(LoggedInState(rawValue: loggedIn)!)
  32. }
  33.  
  34. if let loggedOut = try? values.decode(String.self, forKey: .loggedOut) {
  35. self = .LoggedOut(LoggedOutState(rawValue: loggedOut)!)
  36. }
  37.  
  38. throw CodingError.decoding("Decoding failed")
  39. }
  40.  
  41. func encode(to encoder: Encoder) throws {
  42. var container = encoder.container(keyedBy: CodingKeys.self)
  43.  
  44. switch self {
  45. case let .LoggedIn(value):
  46. try container.encode(value.rawValue, forKey: .loggedIn)
  47. case let .LoggedOut(value):
  48. try container.encode(value.rawValue, forKey: .loggedOut)
  49. }
  50. }
  51. }
  52.  
  53.  
  54.  
  55. class ViewController: UIViewController {
  56.  
  57. override func viewDidLoad() {
  58. super.viewDidLoad()
  59.  
  60. let state = UserState.LoggedIn(.playing)
  61. UserDefaults.standard.set(encoded, forKey: "state")
  62. }
  63. }
  64.  
  65. [User Defaults] Attempt to set a non-property-list object Codable.UserState.LoggedIn(Codable.LoggedInState.playing) as an NSUserDefaults/CFPreferences value for key state
  66. 2018-01-20 19:06:26.909349+0200 Codable[6291:789687]
Add Comment
Please, Sign In to add comment