使用Swift 3存储自定义对象数组

时间:2017-06-17 19:12:40

标签: arrays swift nsuserdefaults

我理解其他人已经问过这个问题,但是,我正在努力在我自己的项目中实施解决方案。我正在为学校创建一个计划应用程序,我想将用户的类存储在ClassInfo对象的数组中。这是我创建对象的ClassInfo类:

case class MasterOfTheUniverse(name: String, power: Int)

scala> MasterOfTheUniverse("He-Man", 100).name
res1: String = He-Man

scala> MasterOfTheUniverse("He-Man", 100).power
res2: Int = 100

scala> MasterOfTheUniverse("He-Man", 100).toString
res3: String = MasterOfTheUniverse(He-Man,100)

scala> MasterOfTheUniverse("He-Man", 100) == MasterOfTheUniverse("She-Ra", 90)
res4: Boolean = false

scala> MasterOfTheUniverse("She-Ra", 90) == MasterOfTheUniverse("She-Ra", 90)
res6: Boolean = true

scala> MasterOfTheUniverse("He-Man", 100).copy(name = "He-Manatee")
res7: MasterOfTheUniverse = MasterOfTheUniverse(He-Manatee,100)

在我的初始视图控制器中,我创建了这样的类数组:

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")
}
}

这是我为数组添加类的代码:

var classes = [ClassInfo]()
let defaults = UserDefaults.standard

最后,我想将数组中的类放入UITableView中。这是我到目前为止所做的代码:

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?

基本上,我只想使用我的自定义ClassInfo对象来保存用户的类,该对象具有类名,句号和房间号。

1 个答案:

答案 0 :(得分:0)

  
      
  1. 如何在UserDefaults中实际更新数组?
  2.   

您必须将其替换为先前存储的值。

但是,由于您正在制作自定义对象和数组,您必须先将其转换为NSData或Data,然后将其存储在UserDefaults中,如:

UserDefaults.standard.set("ENTER_YOUR_DATA", forKey:"ENTER_YOUR_TAG")
UserDefaults.standard.synchronise()
  
      
  1. 你为什么使用NSObject?
  2.   

你可以通过使用结构和节省内存来做同样的事情,只需使函数可变以实现相同的功能。