Я делал много архивации NSCoding в Obj-C, но я не уверен, как он обрабатывает структуры в Swift или массивы с необязательными значениями. Вот мой код:
public struct SquareCoords {
var x: Int, y: Int
}
и вот класс, который мне нужно сохранить:
public class Player: NSCoding {
var playerNum: Int
var name = ""
private var moveHistory: [SquareCoords?] = []
init (playerNum: Int, name: String) {
self.playerNum = playerNum
self.name = name
}
public required init(coder aDecoder: NSCoder!) {
playerNum = aDecoder.decodeIntegerForKey("playerNumKey")
name = aDecoder.decodeObjectForKey("nameKey") as String
moveHistory = aDecoder.decodeObjectForKey("moveHistoryKey") as [SquareCoords?]
}
public func encodeWithCoder(aCoder: NSCoder!) {
aCoder.encodeInteger(playerNum, forKey: "playerNumKey")
aCoder.encodeObject(name, forKey: "nameKey")
aCoder.encodeObject(moveHistory, forKey: "moveHistoryKey")
}
...
В последней строке инициализации кодера я получаю следующее сообщение об ошибке в XCode:
'AnyObject' is not convertible to [SquareCoords?]'
и в последней строке encodeWithEncoder:
Extra argument 'forKey' in call
Может ли кто-нибудь заставить меня двигаться в правильном направлении?