У меня есть следующее определение структуры:Как закодировать и декодировать структуру в NSData в swift?
struct ThreadManager: Equatable {
let fid: Int
let date: NSDate
let forumName: String
let typeid: Int
var page: Int
var threadList: [Thread]
var totalPageNumber: Int?
}
и нить:
struct Thread: Equatable {
let author: Author
let replyCount: Int
let readCount: Int
let title: String
let tid: Int
let isTopThread: Bool
var attributedStringDictionary: [String: NSAttributedString]
var postDescripiontTimeString: String
var hasRead: Bool
}
Как кодировать переменную ThreadManager в NSData? Я попытался использовать следующие функции, но это не беспокоит.
func encode<T>(var value: T) -> NSData {
return withUnsafePointer(&value) { p in
NSData(bytes: p, length: sizeofValue(value))
}
}
func decode<T>(data: NSData) -> T {
let pointer = UnsafeMutablePointer<T>.alloc(sizeof(T))
data.getBytes(pointer, length: sizeof(T))
return pointer.move()
}
У меня есть элементы ThreadManager, и я хочу их хранить в sqlite. Поэтому мне нужно преобразовать их в NSData. У меня есть переменная, называемая threadManager, количество элементов в ее threadList составляет около 70. Я запускаю код и устанавливаю точку останова, а входной код (threadManager) в консоли xcode - всего 73 байта. Это неверно. Как я могу кодировать и декодировать эти структуры в NSData.
Вы не можете сериализовать экземпляры класса, такие как 'NSDate' и сложные типы, такие как' String', только с помощью указателей. У них есть данные, которые хранятся по ссылке. Вам придется идти по элементу, чтобы выполнить сериализацию. Если вы хотите сохранить данные в виде двоичного блока, я бы предложил рассмотреть список свойств. –