ios - 错误:二元运算符“-=”不能应用于“Int?”类型的操作数 和“诠释”
问题描述
这个类似的问题已经在 SO 上被问过很多次但是我仍然没有收到任何解决方案。我对 iOS 很陌生。所以请让我知道我是否在这里犯了任何错误..???
注意:我正在使用 Xcode 8 转换 Swift 2.3 - Swift 3.2
func dateFourHoursBack() -> Date {
let today = Date()
let calendar = Calendar.current
var components = (calendar as NSCalendar).components([.year, .month, .day, .hour, .minute, .second] , from: today)
components.hour -= 4 //Error : Binary operator '-=' cannot be applied to operands of type 'Int?' and 'Int
return calendar.date(from: components)!
}
请帮我...
解决方案
这是一个糟糕的转换。不要NSCalendar
在 Swift 3+ 中使用。
该错误表明您不能将-=
运算符应用于可选。
与 Swift 3+ 中的 Swift 2 不同,所有日期组件都是可选的,但如果在该dateComponents(...
行中指定了单位,您可以安全地强制展开它。
func dateFourHoursBack() -> Date {
let today = Date()
let calendar = Calendar.current
var components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second] , from: today)
components.hour! -= 4
return calendar.date(from: components)!
}
顺便还有一个更方便的方法
func dateFourHoursBack() -> Date {
return Calendar.current.date(byAdding: .hour, value: -4, to: Date())!
}
推荐阅读
- numpy - einsum 可以用来重塑操作数吗?
- node.js - 在 Mongoose 中使用 populate() 返回已保存项目的列表
- javascript - 使用异步等待时如何添加“发送/获取”状态?
- batch-file - 如果没有错误,如何让批处理脚本移动文件
- django - 在 Django 中为具有多个模型的外键的模型设置内联
- java - Java & Type Erasure - 如何从字符串“MyClass”生成 MyClass.class
- javascript - 画布上的可拖动文本
- ios - 如何在自定义 flowLayout 中平滑地为 uicollectionview 中的过渡单元格设置动画
- list - Flutter 从列表中删除空值
- json - 从 JBoss 中的 EJB 调用的 Resteasy 客户端。在不干扰 EJB 的情况下,为客户端配置自定义 JSON 编组器/解组器的最佳方式是什么?