Архивирование пользовательских классов в Swift

Я хотел бы заархивировать и разархивировать пользовательский объект в быстром режиме, примерно так:

class Line : NSObject, NSCoding  {

    var start : CGPoint


    init(start _start: CGPoint) {
        start = _start
    }

    required init(coder aDecoder: NSCoder) {
        // 1 - compile time error
        self.start = aDecoder.decodeObjectForKey("start") as CGPoint
    }

    override init() {
    }

    func encodeWithCoder(aCoder: NSCoder) {
        // 2 - compile time error
        aCoder.encodeObject(start, forKey: "start")
    }
}

1. Ошибка времени компиляции: тип «CGPoint» не соответствует протоколу «AnyObject».

2. Ошибка времени компиляции: дополнительный аргумент forKey в вызове

Как заархивировать и разархивировать CGPoint, я знаю, что CGPoint поражен, и это проблема, но как ее решить?

заранее спасибо.


person szuniverse    schedule 03.02.2015    source источник


Ответы (3)



Может быть, вы можете преобразовать CGPoint в NSValue.

func encodeWithCoder(aCoder: NSCoder) {
    var cgPointAsObject:NSValue = NSValue(CGPoint: start)
    aCoder.encodeObject(cgPointAsObject, forKey: "start")
}

Аналогичным образом обратный процесс конвертирует NSValue в CGpoint при декодировании.

person Vinoth Kumar    schedule 03.02.2015

В swift3 есть некоторые изменения func, чтобы сделать так:

class UserModel: NSObject,NSCoding {

var username:String = ""
var password: Int = 0

required init(coder aDecoder: NSCoder) {
    super.init()

}

override init() {

}

func encode(with aCoder: NSCoder) {

    }

}
person aircraft    schedule 11.11.2016