【问题标题】:Trying to convert NSDate to Date and getting warning尝试将 NSDate 转换为 Date 并收到警告
【发布时间】:2017-07-15 18:55:15
【问题描述】:

我收到以下警告

从 'NSDate?' 强制转换“约会”只是展开和桥接;你是否 意思是使用'!'用'as'?

在以下代码行:

pickDate.date = item?.date as! Date

其中pickDateUIDatePicker。该代码有效,如果我尝试遵循推荐的修复程序,它们会循环显示其他警告或错误。

有什么建议吗?

【问题讨论】:

  • 什么是item
  • 项目是一个实体
  • 这些建议都不起作用——同样的问题。我可以通过获取 1970 年的毫秒数然后创建一个新日期来解决这个问题,但我觉得必须有更直接的方法。

标签: ios date swift3 nsdate swift4


【解决方案1】:

使用 Swift 3.x (Xcode 8.3.3) 我能够摆脱警告:

pickDate.date = item.date! as Date

但这假设“项目”不再是可选的(在我的代码中我可以 if-let 它)。

【讨论】:

    【解决方案2】:
    if let model = item, item?.date != nil{
    
            pickDate.date = model.date
    
    }
    

    【讨论】:

      【解决方案3】:

      item is an Entity 没有提供足够的信息(最好包括实体的定义),但根据消息,item?.data 的类型为 NSDate?(又名 Optional<NSData>) .您可以使用as-casting 将NSDate 转换为Date,以及将NSDate? 转换为Date?

      (在NSDateDate之间进行转换时,您通常不使用as!as?。)

      if let theDate = item?.date as Date? {
          pickDate.date = theDate
      } else {
          //Generally, silently ignoring unexpected value would be a bad habit.
          print("`item?.date` is nil")
      }
      

      【讨论】:

        【解决方案4】:

        item 可能为零。然后item?.data 可能为零。 试试这个:

        pickDate.date = item!.date as! Date
        

        pickDate.date = (item?.date)! as Date
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-19
          • 1970-01-01
          • 2021-09-19
          • 2018-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多