这是一种特定于隐式展开的可选的行为。这 !在类型名称之后使其成为隐式展开的可选,例如使用 NSTimeInterval!。编译器将允许您尝试访问可选项中的值,而无需检查 nil。如果在运行时有一个 nil,你的程序就会爆炸。
出于某种原因, -= 不能与左侧隐式展开的可选选项一起应用。NSTimeInterval 是 Double 的类型别名,所以我将使用一个简单的示例。
var time = 0.0
var dangerousTime: Double! = 15.0
time -= dangerousTime // works fine
dangerousTime = dangerousTime - time // works fine
dangerousTime -= time // errors out
隐式展开的选项是危险的,你应该避免使用它们。无论如何,这可能会解决您的问题。从这里开始的几种可能的方法:
在 Swift 中,你不需要 Optional 来声明一个没有初始化的变量。在您为其分配初始值之前,编译器不会让您使用它。
var time: Double
var foo = time + 5 // error
time = 4.0
foo = time + 5 // success
您可能想要的是一个常规的旧 Optional 和使用 Optional 的安全语法。
var maybeTime: Double?
if let time = maybeTime {
maybeTime = time - 42
}