encodeRestorableState (с :) передает вам экземпляр NSCoder.Любые переменные, которые вам требуются для восстановления вашего состояния, должны быть закодированы здесь с использованием encode (_: forKey :) с этим кодером и поэтому должны соответствовать Codable.
decodeRestorableState (с :) передает вам этот же кодер в тело функции.Вы можете получить доступ к свойствам в декодере с помощью ключа, который вы использовали, когда они были закодированы, а затем установить их для переменных экземпляра или иным образом использовать их для настройки вашего контроллера.
например
import UIKit
struct RestorationModel: Codable {
static let codingKey = "restorationModel"
var someStringINeed: String?
var someFlagINeed: Bool?
var someCustomThingINeed: CustomThing?
}
struct CustomThing: Codable {
let someOtherStringINeed = "another string"
}
class ViewController: UIViewController {
var someStringIDoNotNeed: String?
var someStringINeed: String?
var someFlagINeed: Bool?
var someCustomThingINeed: CustomThing?
override func encodeRestorableState(with coder: NSCoder) {
super.encodeRestorableState(with: coder)
let restorationModel = RestorationModel(someStringINeed: someStringINeed,
someFlagINeed: someFlagINeed,
someCustomThingINeed: someCustomThingINeed)
coder.encode(restorationModel, forKey: RestorationModel.codingKey)
}
override func decodeRestorableState(with coder: NSCoder) {
super.decodeRestorableState(with: coder)
guard let restorationModel = coder.decodeObject(forKey: RestorationModel.codingKey) as? RestorationModel else {
return
}
someStringINeed = restorationModel.someStringINeed
someFlagINeed = restorationModel.someFlagINeed
someCustomThingINeed = restorationModel.someCustomThingINeed
}
}