Zitong
Zitong

Reputation: 13

How do I encode Character using NSCoder in swift?

Like

How do I encode enum using NSCoder in swift?

Code:

import Foundation

class Car: NSObject, NSCoding {
    var bmw: Character
    required init(coder decoder: NSCoder) {
        bmw = (decoder.decodeObjectForKey("bmw") as? Character)!
    }

    func encodeWithCoder(encoder: NSCoder) {
        encoder.encodeObject(bmw, forKey: "bmw")
    }
}

Xcode throw an error:

Cannot invoke 'encodeObject' with an argument list of type '(Characher, forKey: String)'

What should I do with Character in swift?

Upvotes: 1

Views: 1200

Answers (1)

Renzo
Renzo

Reputation: 27424

The reason of the error is that, while String is subtype of AnyObject, Character is not (since a character is not an object). A way to solve your problem could be the following:

class Car: NSObject {
  var bmw: Character
  required init(coder decoder: NSCoder) {
    bmw = Character(decoder.decodeObjectForKey("bmw") as! String)
  }

  func encodeWithCoder(encoder: NSCoder) {
    encoder.encodeObject(String(bmw), forKey: "bmw")
  }
}

Here you convert the character to a string before encoding it, and convert back to character after decoding.

Upvotes: 1

Related Questions