2014-11-24 91 views
8

我一直在關注Objective-C教程,並且教師能夠將NSTimeInterval對象轉換爲NSDate對象。SWIFT將NSTimeInteval轉換爲NSDate

本課使用CoreData,並將文章的日期作爲NSTimeInterval存儲,稍後我們想要檢索該時間間隔並將其設置爲格式化的日期字符串,以在UITableVIewController中將其作爲節標題呈現。

class DiaryEntry: NSManagedObject { 

@NSManaged var date: NSTimeInterval 
@NSManaged var body: String 
@NSManaged var imageData: NSData 
@NSManaged var mood: Int16 
@NSManaged var location: String 

func sectionName() -> String { 
    let date = NSDate().dateByAddingTimeInterval(self.date) 
    let f = NSDateFormatter() 
    f.dateFormat = "MMM yyy" 

    return f.stringFromDate(date) 
} 

} 

關注的主要線路:

let date:NSDate = NSDate().dateByAddingTimeInterval(self.date) 

哪個現在實際上是將設定的日期到當前日期,這不是我想要的行爲。

如何將self.date變量投射到SWIFT中的NSDate對象?

回答

15

還有就是NSDate這需要一個NSTimeIntervalinitializer

init(timeIntervalSinceReferenceDate ti: NSTimeInterval) 

所以只是做:

var date = NSDate(timeIntervalSinceReferenceDate: 123) 
+0

感謝彼得,由於某種原因,我的XCode的intellisense沒有響應,當我第一次打開我的構造函數時沒有看到這些選項。 – Alex 2014-11-24 18:17:47

+0

@Alex你不需要*智能感知。 :) – Lance 2014-11-24 18:21:16

+0

@Lance我可能會更清楚,但我只是剛開始在iOS上 - 需要用自己的文檔保存; – Alex 2014-11-24 18:28:20

2

此代碼是真的很困惑。

時間間隔不是日期。日期是一個時間點。時間間隔是兩個時間點之間的時間差。每當你有時間間隔時,你就會有這樣的問題:「它是兩個日期之間的秒數?你正確地認識到,將數據庫中存儲的時間間隔添加到NSDate()中不太可能提供有用的結果,因爲相同的10秒鐘後執行的呼叫會給出不同的日期

帖子的日期應該很可能存儲爲NSDate對象Core Data處理NSDate對象就好了如果要存儲時間間隔,自定義引用日期後,必須將時間間隔轉換爲時間間隔;例如,使用「timeIntervalSinceReferenceDate」來完成此操作,如果這樣做,我強烈建議您不要調用變量「date」,而是調用「secondsSinceReferenceDate」這使得在給定日期時顯然存儲什麼,以及如何將該數字轉換回NSDate。

(之所以稱它爲「secondsSinceReferenceDate」是因爲有很多代碼試圖存儲毫秒或納秒,並且有很多代碼存儲自時代以來的時間間隔(1970年1月1日),所以它是真的如果有人閱讀你的代碼,只要查看變量名稱就可以立即知道數字的含義)。

+0

感謝gnasher。我也很困惑爲什麼我跟隨的教程的作者沒有選擇nsdate,他甚至從來沒有澄清過他的推理,但是由於這是我第一次在快速和核心數據中,我認爲可能會有好處,謝謝你清除我的懷疑 – Alex 2014-11-25 12:42:35