swift - 将 NSDate 转换为日期

标签 swift core-data nsdate

这可能是个愚蠢的问题,但我找不到相关信息。我在我的应用程序中使用 CoreData,并保存了一个结构数组。问题是当我获取并尝试将其恢复到结构数组中时,我的 Date 变量有问题;我找不到将它从 NSDate 转换为 Date 的方法,我尝试使用 as Date,但这让我感到沮丧,我不确定它是否安全。这是对的吗?或者还有其他方法吗?

这是我的结构:

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

这就是我获取数据的方式:

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

最佳答案

result.date 是一个可选 NSDate,所以你可以桥接它 到可选的 Date:

result.date as Date?

然后使用可选绑定(bind)来安全地解包它。在你的情况下 可能是

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: ...) 几乎从来不是你想要的 想要,即使编译器建议它编译代码。)

关于swift - 将 NSDate 转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45778236/

相关文章:

ios - 如何清除/重置一对多关系中的所有CoreData

iphone - 使用本地时区将 unix 时间戳转换为 NSdate

Swift - 将日期字符串从 "datepicker filled date field"转换为 nsdate

ios - 如何表示 nil Error Swift 完成 block

ios - RestKit 序列化创建重复条目

ios - 如何高效过滤约20万个NSDictionaries的NSArray?

swift - 我如何在 Swift 中将 "6 September, 2015"转换为 NSDate()?

swift - 我希望 imageView 图像在被点击时等于 CollectionView 图像?

ios - 访问 Assets 文件夹中的内部文件夹

ios - 'NSUnknownKeyException',原因 : '[<ViewController 0x8a45930> setValue:forUndefinedKey:]: