2017-08-20 75 views
4

這可能是一個愚蠢的問題,但我找不到信息。我在我的應用程序中使用CoreData,並保存了一系列結構。問題是當我獲取並嘗試將其恢復到結構數組中時,我的Date變量有問題;我無法找到將其從NSDate轉換爲日期的方法,我嘗試使用as Date,但它使我強制低調,並且我不確定它是否安全。這是對的嗎?還是有另一種方式?轉換NSDate到日期

這是我的STRUC:

struct MyData { 
     var value = Int() 
     var date = Date() 
     var take = Int() 
     var commnt = String() 
    } 

這是我如何fetchin數據:

func fetchRequestInfo() -> [MyData] { 

     let fetchRequest: NSFetchRequest<GlucoseEvents> = GlucoseEvents.fetchRequest() 

     do { 
      let searchResults = try DatabaseController.getContext().fetch(fetchRequest) 

      for result in searchResults as [GlucoseEvents] { 
       let value = Int(result.value) 
       let date = result.date as Date 
       let take = Int(result.take) 
       let commnt = String(describing: result.commnt) 
       let data = MyData(value: value, date: date, take: take, commnt: commnt) 
       self.dataArray.append(data) 
       } 



      } catch { 

       print ("error: \(error)") 

      } 
     let orderArray = self.dataArray.sorted(by: { $0.date.compare($1.date) == .orderedAscending}) 
     return orderArray 
    } 

這是我怎麼設置我的CoreDataClass的屬性:

@NSManaged public var commnt: String? 
    @NSManaged public var date: NSDate? 
    @NSManaged public var value: Int16 
    @NSManaged public var take: Int16 
+0

展。你的。碼! – matt

+2

我的猜測:你有*可選* NSDate。 –

+1

如何定義「GlucoseEvents」?特別是'fec'屬性? –

回答

5

result.date可選NSDate,這樣你就可以彌補它 到可選Date

result.date as Date? 

然後使用可選的結合安全解開它。你的情況是 可能是

guard let date = result.date as Date? else { 
    // date is nil, ignore this entry: 
    continue 
} 

您還可能要更換

let commnt = String(describing: result.commnt) 

guard let commnt = result.commnt else { 
    // commnt is nil, ignore this entry: 
    continue 
} 

否則你會得到註釋字符串像Optional(My comment)

憑經驗:String(describing: ...)是幾乎從來沒有什麼你 想,即使編譯器表明,它使代碼編譯。)

0

只是要隱式轉換,如:

let nsdate = NSDate() 
let date = nsdate as Date