我有以下結構定義:如何在swift中對struct NSData進行編碼和解碼?
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.我運行代碼並設置一個斷點,並在Xcode控制檯中輸入encode(threadManager),它只有73個字節。這是錯誤的。我怎樣才能編碼和解碼這些結構到NSData。
只能使用指針,不能序列化類實例像'NSDate'和類似'String'的複雜類型。他們有通過參考存儲的數據。你將不得不逐個進行序列化。如果你想將數據存儲爲二進制blob,那麼我會建議考慮使用屬性列表。 –