class story: NSObject, NSCoding {
var label = UILabel()
var title = String()
var index = Int()
var cover = UIImage()
var frame = CGRect()
func encode(with aCoder: NSCoder) {
if let label = label { aCoder.encodeObject(label, forKey: "label") as! UILabel }
if let title = title { aCoder.encodeObject(title, forKey: "title") }
if let index = index { aCoder.encodeObject(index, forKey: "index") }
if let cover = cover { aCoder.encodeObject(cover, forKey: "cover") }
if let frame = frame { aCoder.encodeObject(frame, forKey: "frame") }
}
required convenience init?(coder aDecoder: NSCoder) {
self.init()
self.label = aDecoder.decodeObject(forKey: "label") as! UILabel
self.title = aDecoder.decodeObject(forKey: "title") as! String
self.index = aDecoder.decodeObject(forKey: "index") as! Int
self.cover = aDecoder.decodeObject(forKey: "cover") as! UIImage
self.frame = aDecoder.decodeObject(forKey: "frane") as! CGRect
}
func formatStorySize() {
let newWidth = self.frame.width * 0.8
let newHeight = self.frame.height * 0.9
let newX = self.frame.origin.x + newWidth / 2
let newY = self.frame.origin.y + newHeight / 2
self.frame = CGRect(x: newX, y: newY, width: newWidth, height: newHeight)
}
func addLabel(text: String) -> UILabel {
let label = UILabel()
label.backgroundColor = UIColor.white
label.text = text
label.textAlignment = .center
let width = self.frame.width
let height: CGFloat = 40
let xPos = self.frame.origin.x
let yPos = self.frame.origin.y + self.frame.height - height
label.frame = CGRect(x: xPos, y: yPos, width: width, height: height)
self.title = label.text!
return(label)
}
}
Мне сказали, что для сохранения массива пользовательских экземпляров класса в UserDefaults
мне нужно добавить функцию кодирования, а также функцию декодирования.Тем не менее я получаю сообщение об ошибке:
Инициализатор для условного связывания должен иметь тип Optional, а не 'UILabel'
после первой строки в функции кодирования ипохожая ошибка после всех последовательных строк.Что мне нужно изменить?