我已经看到了与此错误相关的其他问题,但是我还没有看到有人提到我目前遇到的问题。请注意,在转换为Swift 4之前,此代码没有任何问题。
以下是令人反感的代码:
let verseNotification = NSManagedObject(entity: entity, insertInto: self.managedObjectContext) as! VerseNotification
verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow)
请注意,属性
date_scheduled
的类型为Date
:@NSManaged public var date_scheduled: Date?
在构建要在物理iPhone(iPhone 7)上的DEBUG中部署的应用程序时,出现以下错误(从Swift 3转换为Swift 4之后):
Cannot assign value of type 'NSDate' to type 'Date?' - Insert 'as Date'
照其说做就解决了问题...所以,现在我的代码是这样的:
verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow) as Date
...直到我将目标切换到模拟器。当我将目标切换为Simulator iPhone 7设备时,现在出现以下错误:
'NSDate' is not implicitly convertible to 'Date'; did you mean to use 'as' to explicitly convert?
如上所示,关于此错误的令人困惑的事情是,我正在明确转换为
Date
类型。具有讽刺意味的是,我可以摆脱模拟器iPhone 7错误的唯一方法是删除在第一步中添加的as Date
。到底是怎么回事?我想念什么?
我担心要为“通用设备”构建一个发行版本,而不知道为什么我会遇到冲突的错误。
更新
我发现了一些新鲜有趣的东西。
在构建以部署到物理iPhone 7设备时,数据模型对象的生成的Core Data定义将
date_scheduled
属性创建为Date
。但是,当我构建要在模拟器iPhone 7上进行部署时,我的数据模型对象的生成的Core Date定义将
date_scheduled
属性创建为NSDate。这是Swift 4或Xcode 9的新功能吗?从Swift 3转换为Swift 4后,我是否缺少新设置?
最佳答案
这是Xcode的错误。请报告或打开雷达,以备将来版本中修复
关于ios - Swift 4-无法在物理设备上仅将 'NSDate'类型的值分配为 'Date?'类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46508770/