Swift 4 - 无法指定'NSDate'类型的值来键入'Date?' 仅适用于物理设备

the*_*atp 8 core-data ios swift3 swift4

我已经看到了与此错误相关的其他问题,但我没有看到有人提到我目前遇到的问题.请注意,在转换为Swift 4之前,我对此代码没有任何问题.

以下是有问题的代码:

let verseNotification = NSManagedObject(entity: entity, insertInto: self.managedObjectContext) as! VerseNotification
verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow)
Run Code Online (Sandbox Code Playgroud)

请注意,该属性date_scheduled的类型为Date:

@NSManaged public var date_scheduled: Date?
Run Code Online (Sandbox Code Playgroud)

当我构建我的应用程序以在我的物理iPhone(iPhone 7)上的DEBUG中部署时,我收到以下错误(从Swift 3转换为Swift 4之后):

Cannot assign value of type 'NSDate' to type 'Date?' - Insert 'as Date'
Run Code Online (Sandbox Code Playgroud)

正如它所说的那样解决问题...所以,现在我的代码是这样的:

verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow) as Date
Run Code Online (Sandbox Code Playgroud)

...直到我将目标切换到模拟器.当我将目标切换为模拟器iPhone 7设备时,我现在收到以下错误:

'NSDate' is not implicitly convertible to 'Date'; did you mean to use 'as' to explicitly convert?
Run Code Online (Sandbox Code Playgroud)

关于这个错误的混淆是,正如你在上面看到的那样,我明确地转换为类型Date.具有讽刺意味的是,我能够摆脱模拟器iPhone 7的这个错误的唯一方法就是删除as Date我在第一步中添加的错误.

到底是怎么回事?我错过了什么?

我担心为"通用设备"构建发布版本,不知道为什么我会收到冲突的错误.

更新 我发现了一些新的,非常有趣的东西.

当我构建部署到我的物理iPhone 7设备时,生成的数据模型对象的Core Data定义将date_scheduled属性创建为Date.

但是,当我构建在Simulator iPhone 7上进行部署时,生成的数据模型对象的Core Date定义date_scheduled会将属性创建为NSDate.

这是Swift 4或Xcode 9中的新功能吗?从Swift 3转换到Swift 4后,我有没有新的设置?

Мак*_*дов 2

它\xe2\x80\x99s Xcode bug。请报告或打开雷达以在未来版本中修复该问题

\n