Thank you so much. I also did notice that the size is unreasonably large. For example, an array of 52 elements of a custom object Card with the following init methods takes about 70KB:
required init?(coder aDecoder: NSCoder) {
self.suit = Suit(rawValue: aDecoder.decodeInteger(forKey: "suit"))! // (custom enum)
self.rank = Rank(rawValue: aDecoder.decodeInteger(forKey: "rank"))! // (custom enum)
self.positionX = CGFloat (aDecoder.decodeDouble(forKey: "positionX"))
self.positionY = CGFloat (aDecoder.decodeDouble(forKey: "positionY"))
self.frontTexture = aDecoder.decodeInteger(forKey: "frontTexture")
self.backTexture = SKTexture(imageNamed: "card_back")
self.faceUp = aDecoder.decodeBool(forKey: "faceUp")
self.possession = aDecoder.decodeObject(forKey: "possession") as! String
self.possessionPrevious = aDecoder.decodeObject(forKey: "possessionPrevious") as! String
self.notDumpable = aDecoder.decodeBool(forKey: "notDumpable")
self.intersectsDeck = aDecoder.decodeInteger(forKey: "intersectsDeck")
super.init(coder: aDecoder)
}
override func encode(with aCoder: NSCoder) {
super.encode(with: aCoder)
aCoder.encode(suit.rawValue, forKey: "suit")
aCoder.encode(rank.rawValue, forKey: "rank")
aCoder.encode(Double(positionX), forKey: "positionX")
aCoder.encode(Double(positionY), forKey: "positionY")
aCoder.encode(frontTexture, forKey: "frontTexture")
aCoder.encode(faceUp, forKey: "faceUp")
aCoder.encode(possession, forKey: "possession")
aCoder.encode(possessionPrevious, forKey: "possessionPrevious")
aCoder.encode(notDumpable, forKey: "notDumpable")
aCoder.encode(intersectsDeck, forKey: "intersectsDeck")
}
So, I did consider sending data using property list encoding and decoding. However, I read that it is not possible to use it to encode/decode Dictionary [String:Any], which I need to send (e.g., https://stackoverflow.com/questions/53585848/swift-encode-and-decode-a-dictionary-stringany-into-plist). Is this true?
Another option may be to use JSONSerialization, but I am not sure whether it is significantly smaller than NSKeyedArchiver.
Topic:
App & System Services
SubTopic:
Networking
Tags: