var session1 = Session(startTime: Date(), endTime: Date()) session1.events.append(Event(timeStamp: Date(), tag: "test session1/event1")) session1.events.append(Event(timeStamp: Date(), tag: "test session1/event2")) var session2 = Session(startTime: Date(), endTime: Date()) session2.events.append(Event(timeStamp: Date(), tag: "test session2/event1")) session2.events.append(Event(timeStamp: Date(), tag: "test session2/event2")) session2.events.append(Event(timeStamp: Date(), tag: "test session2/event3")) let sessions: [Session] = [session1, session2] let data = NSKeyedArchiver.archivedData(withRootObject: sessions.encoded) let back = (NSKeyedUnarchiver.unarchiveObject(with: data) as? [Session.Coding])?.decoded print(back ?? "error in getting back sessions") /* [ Session( startTime: 2016-10-15 13:34:45 +0000, endTime: Optional(2016-10-15 13:34:45 +0000), events: [ Event(timeStamp: 2016-10-15 13:34:45 +0000, eventTag: "test session1/event1"), Event(timeStamp: 2016-10-15 13:34:45 +0000, eventTag: "test session1/event2")]), Session( startTime: 2016-10-15 13:34:45 +0000, endTime: Optional(2016-10-15 13:34:45 +0000), events: [ Event(timeStamp: 2016-10-15 13:34:45 +0000, eventTag: "test session2/event1"), Event(timeStamp: 2016-10-15 13:34:45 +0000, eventTag: "test session2/event2"), Event(timeStamp: 2016-10-15 13:34:45 +0000, eventTag: "test session2/event3")])] */