使用Swift存储自定义对象数组3
问题描述:
我知道其他人问过这个问题,但是,我正在努力在我自己的项目中实现该解决方案。我正在为学校创建一个计划应用程序,并且我想将用户的类存储在一个ClassInfo对象的数组中。下面是创建该对象我的ClassInfo类:使用Swift存储自定义对象数组3
class ClassInfo: NSObject {
var name = String()
var room = String()
var period = Int()
init(name: String, room: String, period: Int) {
self.name = name
self.room = room
self.period = period
}
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.room = aDecoder.decodeObject(forKey: "room") as! String
self.period = aDecoder.decodeObject(forKey: "period") as! Int
}
func encode(with aCoder: NSCoder) {
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.room, forKey: "room")
aCoder.encode(self.period, forKey: "period")
}
}
以我初始视图控制器,I创建类阵列是这样的:
var classes = [ClassInfo]()
let defaults = UserDefaults.standard
这是我的代码,用于将一类到所述阵列:
let c = ClassInfo(name: className.text!, room: roomNumber.text!, period: period.selectedSegmentIndex + 1)
classes.insert(c, at: periodsSelected.index(of: period.selectedSegmentIndex + 1)!)
//How do I actually update the array in UserDefaults?
最后,我想将数组中的类放入UITableView中。这里是我迄今为止做的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("ScheduleTableViewCell", owner: self, options: nil)?.first as! ScheduleTableViewCell
cell.classLabelView.text = "\(classes[indexPath.row].name)"
cell.classPeriodLabel.text = "\(classes[indexPath.row].period)"
cell.roomLabel.text = "\(classes[indexPath.row].room)"
cell.isUserInteractionEnabled = true
cell.selectionStyle = .none
return cell
}
基本上,我只是想利用具有类的名称,周期和房间号我的自定义的ClassInfo对象来保存用户的类。
答
- 如何实际更新UserDefaults中的数组?
您必须将其替换为之前存储的值。
但也因为你正在和自定义对象的阵列,则必须将其转换成NSData的或数据的第一和然后将其存储在像UserDefaults:
UserDefaults.standard.set("ENTER_YOUR_DATA", forKey:"ENTER_YOUR_TAG")
UserDefaults.standard.synchronise()
开始=“2”>
- 你为什么使用NSObject?
你可以通过使用结构做同样的和节省存储空间,才使可变来实现相同的功能的功能。